diff --git a/README.md b/README.md index 09e5f755..f81d7ff2 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ It should be noted that this codebase makes heavy use of inheritance. ### Solidity code in the `/contracts/internals/` folder [balanceable.sol](/contracts/internals/balanceable.sol) is an inheritable contract that checks the ETH or ERC20 balance of an address. -[burner.sol](/contracts/internals/burner.sol) defines the Burner interface used for burning TKN for the cash n' burn functionality. +[burner.sol](/contracts/internals/burner.sol) defines the Burner interface used for burning TKN for the cash n' burn functionality. [bytesUtils.sol](/contracts/internals/bytesUtils.sol) includes a set of utils for parsing bytes to things like ints and addresses. @@ -134,9 +134,7 @@ It should be noted that this codebase makes heavy use of inheritance. [isValidSignatureExporter.sol](/contracts/mocks/isValidSignatureExporter.sol) used to export valid signatures for meta transaction testing. -[nonCompliantToken.sol](/contracts/mocks/nonCompliantToken.sol) a version of a non-compliant ERC20 token, used to test the SafeERC20 stuff. - -[oraclize.sol](/contracts/mocks/oraclize.sol) is a mocked out version of the oraclize, this is for testing purposes only. +[nonCompliantToken.sol](/contracts/mocks/nonCompliantToken.sol) a version of a non-compliant ERC20 token, used to test the SafeERC20 stuff. [parseIntScientific-exporter.sol](/contracts/mocks/parseIntScientificExporter.sol) is a mocked out version of a contract that pulls in the parseIntScientific contract used to parse floating points that include scientific notation out of JSON. @@ -161,7 +159,6 @@ All of the third-party code we rely on can be found in this folder. The below ta | [ENS Pubic Resolver](https://raw.githubusercontent.com/ensdomains/resolvers/797c8b63617d1bfe4d046274b58c05e991fbae76/contracts/PublicResolver.sol) | [BSD2](https://github.com/ensdomains/ens/blob/master/LICENSE) | | [ENS Registry](https://raw.githubusercontent.com/ensdomains/ens/aa30b7eae4efdb2089893b7a461c76dbbc011783/contracts/ENSRegistry.sol) | [BSD2](https://github.com/ensdomains/ens/blob/master/LICENSE) | | [strings.sol](https://github.com/Arachnid/solidity-stringutils/pull/37) | [Apache v2](https://github.com/Arachnid/solidity-stringutils/blob/master/LICENSE) | -| [oraclizeAPI](https://raw.githubusercontent.com/provable-things/ethereum-api/d02497b4d84e02a8649af3822950873d305f7659/oraclizeAPI_0.5.sol) | [MIT](https://github.com/oraclize/ethereum-api/blob/master/LICENSE) | | [gnosis MultiSig](https://github.com/gnosis/MultiSigWallet) | [GPLv3](https://github.com/gnosis/MultiSigWallet/blob/master/LICENSE) | | [zOS Upgradeability](https://github.com/OpenZeppelin/openzeppelin-sdk/blob/9baca3afb5649b6defc3a75eeb69f4930852180f/packages/lib/contracts/upgradeability/Proxy.sol) | [MIT](https://github.com/OpenZeppelin/openzeppelin-sdk/blob/9baca3afb5649b6defc3a75eeb69f4930852180f/LICENSE) | @@ -234,4 +231,4 @@ dot contracts.dot -Tpng -o ./wallet.inheritance.png ## Resources [🎮 Discord](https://discord.gg/GN6gGEP) | [🗞️Blog](https://medium.com/@Monolith) | [👽 Reddit](https://www.reddit.com/r/Monolith_Web3/) | [🕸️ Website ](https://monolith.xyz/) | [🐦 Twitter](https://twitter.com/monolith_web3) | -|---|---|---|---|---| +|---|---|---|---|---| diff --git a/build.sh b/build.sh index c6edbc51..81fc184d 100755 --- a/build.sh +++ b/build.sh @@ -84,6 +84,8 @@ contracts=( "mocks/token/Token mocks/token.go Token mocks" "mocks/tokenWhitelistableExporter/TokenWhitelistableExporter mocks/tokenWhitelistableExporter.go TokenWhitelistableExporter mocks" "mocks/wallet/Wallet mocks/wallet.go Wallet mocks" + "mocks/gasToken/GasToken mocks/gasToken.go GasToken mocks" + "mocks/gasBurner/GasBurner mocks/gasBurner.go GasBurner mocks" "externals/ens/ENSRegistry/ENSRegistry externals/ens/ENSRegistry.go ENSRegistry ens" "externals/ens/PublicResolver/PublicResolver externals/ens/PublicResolver.go PublicResolver ens" "externals/upgradeability/UpgradeabilityProxy/UpgradeabilityProxy externals/upgradeability/UpgradeabilityProxy.go UpgradeabilityProxy upgradeability" @@ -94,4 +96,4 @@ do generate_binding "$c" done -echo "done" \ No newline at end of file +echo "done" diff --git a/contracts/artifacts/AddressWhitelist.json b/contracts/artifacts/AddressWhitelist.json new file mode 100644 index 00000000..1491a0d7 --- /dev/null +++ b/contracts/artifacts/AddressWhitelist.json @@ -0,0 +1,592 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d589369760345534801561005557600080fd5b50611f60806100656000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637fd004fa116100b8578063cd7958dd1161007c578063cd7958dd14610385578063ce0b5bd514610438578063d251fefc14610455578063de212bf314610472578063e2b4ce971461047a578063f42176481461048257610137565b80637fd004fa146102bc5780638da5cb5b1461032a578063b242e53414610332578063be40ba7914610360578063cbd2ac681461036857610137565b806347b55a9d116100ff57806347b55a9d146101fd5780635adc02ab146102055780636137d67014610222578063715018a6146102905780637d73b2311461029857610137565b8063100f23fd1461013c5780632121dc751461015b57806326d05ab214610177578063294f40251461017f57806332531c3c146101d7575b600080fd5b6101596004803603602081101561015257600080fd5b50356104f0565b005b610163610695565b604080519115158252519081900360200190f35b6101636106a6565b6101876106af565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101c35781810151838201526020016101ab565b505050509050019250505060405180910390f35b610163600480360360208110156101ed57600080fd5b50356001600160a01b0316610711565b610187610726565b6101596004803603602081101561021b57600080fd5b5035610786565b6101596004803603602081101561023857600080fd5b810190602081018135600160201b81111561025257600080fd5b82018360208201111561026457600080fd5b803590602001918460208302840111600160201b8311171561028557600080fd5b509092509050610a68565b610159610c8e565b6102a0610d8c565b604080516001600160a01b039092168252519081900360200190f35b610159600480360360208110156102d257600080fd5b810190602081018135600160201b8111156102ec57600080fd5b8201836020820111156102fe57600080fd5b803590602001918460208302840111600160201b8311171561031f57600080fd5b509092509050610d9b565b6102a06110dd565b6101596004803603604081101561034857600080fd5b506001600160a01b03813516906020013515156110ec565b6101636112a6565b6101596004803603602081101561037e57600080fd5b50356112b5565b6104266004803603602081101561039b57600080fd5b810190602081018135600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460208302840111600160201b831117156103e857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611644945050505050565b60408051918252519081900360200190f35b6101596004803603602081101561044e57600080fd5b503561169e565b6102a06004803603602081101561046b57600080fd5b5035611847565b61016361186e565b61042661187c565b6101596004803603602081101561049857600080fd5b810190602081018135600160201b8111156104b257600080fd5b8201836020820111156104c457600080fd5b803590602001918460208302840111600160201b831117156104e557600080fd5b509092509050611882565b6104f933611bd4565b80610508575061050833611be8565b610552576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a5460ff166105a1576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61060460388054806020026020016040519081016040528092919081815260200182805480156105fa57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105dc575b5050505050611644565b81146106415760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b61064d60386000611dfa565b603a805460ff19169055604080513381526020810183905281517f7794eff834d760583543e6e510e717a5e66d2c064e225f4db448343c3e66afcf929181900390910190a150565b603554600160a01b900460ff165b90565b603a5460ff1681565b6060603980548060200260200160405190810160405280929190818152602001828054801561070757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106e9575b5050505050905090565b60366020526000908152604090205460ff1681565b60606038805480602002602001604051908101604052809291908181526020018280548015610707576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116106e9575050505050905090565b61078f33611be8565b6107e0576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b603a5460ff1661082f576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61089060388054806020026020016040519081016040528092919081815260200182805480156105fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105dc575050505050611644565b81146108cd5760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b60005b6038548110156109b45760366000603883815481106108eb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166109ac576001603660006038848154811061092a57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560388054603791908390811061097057fe5b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b6001016108d0565b507fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a33603860405180836001600160a01b03166001600160a01b03168152602001806020018281038252838181548152602001915080548015610a4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a22575b5050935050505060405180910390a1610a5b60386000611dfa565b50603a805460ff19169055565b610a7133611bd4565b80610a7b57503330145b610abf576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015610ada5750603a54610100900460ff16155b610b2b576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b603a5462010000900460ff16610b84576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b80610bc8576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b610bd460398383611e1b565b50603a805461ff00191661010017905560408051602080840282810182019093528382527ffbc0e5ca6c7e4858daf0fdb185ef5186203e74ec9c64737e93c0aeaec596e1d19285928592610c439285918591829185019084908082843760009201919091525061164492505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b610c9733611bd4565b610ce1576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16610d3f576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b610da433611bd4565b80610dae57503330145b610df2576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015610e0d5750603a54610100900460ff16155b610e5e576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015610f7a57610eb7828281518110610eaa57fe5b6020026020010151611bd4565b15610f02576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110610f1957fe5b60200260200101516001600160a01b03161415610f72576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101610e92565b50603a5462010000900460ff16610fd4576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b81611018576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b61102460388484611e1b565b50603a805460ff1916600117905560408051602080850282810182019093528482527f9c80b3b5f68b3e017766d59e8d09b34efe6462b05c398f35cab9e271d9bc3b9c92869286926110919285918591829185019084908082843760009201919091525061164492505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6035546001600160a01b031690565b6110f533611bd4565b61113f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff1661119d576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166111e25760405162461bcd60e51b8152600401808060200182810382526023815260200180611ee66023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061123b57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603a5462010000900460ff1681565b6112be33611be8565b61130f576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b603a54610100900460ff16611363576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6113c460398054806020026020016040519081016040528092919081815260200182805480156105fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105dc575050505050611644565b81146114015760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b60005b60395481101561158f57603660006039838154811061141f57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611587576000603660006039848154811061145f57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091555b6037546114a990600163ffffffff611c7c16565b81101561157157603982815481106114bd57fe5b600091825260209091200154603780546001600160a01b0390921691839081106114e357fe5b6000918252602090912001546001600160a01b031614156115695760378054600019810190811061151057fe5b600091825260209091200154603780546001600160a01b03909216918390811061153657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611571565b600101611495565b506037805490611585906000198301611e7e565b505b600101611404565b507fd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b33603960405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818154815260200191508054801561161b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115fd575b5050935050505060405180910390a161163660396000611dfa565b50603a805461ff0019169055565b60008160405160200180828051906020019060200280838360005b8381101561167757818101518382015260200161165f565b50505050905001915050604051602081830303815290604052805190602001209050919050565b6116a733611bd4565b806116b657506116b633611be8565b611700576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a54610100900460ff16611754576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6117b560398054806020026020016040519081016040528092919081815260200182805480156105fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105dc575050505050611644565b81146117f25760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b6117fe60396000611dfa565b603a805461ff0019169055604080513381526020810183905281517f13c935eb475aa0f6e931fece83e2ac44569ce2d53460d29a6dedab40b965c8a3929181900390910190a150565b6037818154811061185457fe5b6000918252602090912001546001600160a01b0316905081565b603a54610100900460ff1681565b60345490565b61188b33611bd4565b8061189557503330145b6118d9576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b81518110156119e857611925828281518110610eaa57fe5b15611970576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b031682828151811061198757fe5b60200260200101516001600160a01b031614156119e0576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b60010161190d565b50603a5462010000900460ff1615611a3f576040805162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081a5b9a5d1a585b1a5e9959605a1b604482015290519081900360640190fd5b60005b82811015611b305760366000858584818110611a5a57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff16611b2857600160366000868685818110611a9657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506037848483818110611aeb57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055505b600101611a42565b50603a805462ff0000191662010000179055604080513380825260208201838152603780549484018590527fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a9492939092909190606083019084908015611bc057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ba2575b5050935050505060405180910390a1505050565b6035546001600160a01b0390811691161490565b6000611bf5603454611cd9565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611c4a57600080fd5b505afa158015611c5e573d6000803e3d6000fd5b505050506040513d6020811015611c7457600080fd5b505192915050565b600082821115611cd3576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6033546000906001600160a01b0316611d39576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015611d8557600080fd5b505afa158015611d99573d6000803e3d6000fd5b505050506040513d6020811015611daf57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015611c4a57600080fd5b5080546000825590600052602060002090810190611e189190611ea7565b50565b828054828255906000526020600020908101928215611e6e579160200282015b82811115611e6e5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611e3b565b50611e7a929150611ec1565b5090565b815481835581811115611ea257600083815260209020611ea2918101908301611ea7565b505050565b6106a391905b80821115611e7a5760008155600101611ead565b6106a391905b80821115611e7a5780546001600160a01b0319168155600101611ec756fe6f776e65722063616e6e6f742062652073657420746f207a65726f20616464726573736e6f6e2d6d61746368696e672070656e64696e672077686974656c6973742068617368a265627a7a72315820c884f4382f33901d736f909bd6aee12ccee90702059e7fbbc13739643ea9c7f364736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH15 0xC2E074EC69A0DFB2997BA6C7D2E1E OR SWAP1 SSTORE PUSH32 0x7F2CE995617D2816B426C5C8698C5EC2952F7A34BB10F38326F74933D5893697 PUSH1 0x34 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F60 DUP1 PUSH2 0x65 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x137 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7FD004FA GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xCD7958DD GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xCD7958DD EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xCE0B5BD5 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xD251FEFC EQ PUSH2 0x455 JUMPI DUP1 PUSH4 0xDE212BF3 EQ PUSH2 0x472 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x47A JUMPI DUP1 PUSH4 0xF4217648 EQ PUSH2 0x482 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x7FD004FA EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x32A JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x332 JUMPI DUP1 PUSH4 0xBE40BA79 EQ PUSH2 0x360 JUMPI DUP1 PUSH4 0xCBD2AC68 EQ PUSH2 0x368 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x47B55A9D GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x47B55A9D EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x5ADC02AB EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x6137D670 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x298 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x100F23FD EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0x26D05AB2 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x294F4025 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x32531C3C EQ PUSH2 0x1D7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x4F0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x163 PUSH2 0x695 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x163 PUSH2 0x6A6 JUMP JUMPDEST PUSH2 0x187 PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1AB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x163 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x711 JUMP JUMPDEST PUSH2 0x187 PUSH2 0x726 JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x786 JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xA68 JUMP JUMPDEST PUSH2 0x159 PUSH2 0xC8E JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0xD8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x10EC JUMP JUMPDEST PUSH2 0x163 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x12B5 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1644 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x169E JUMP JUMPDEST PUSH2 0x2A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1847 JUMP JUMPDEST PUSH2 0x163 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x187C JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x4B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1882 JUMP JUMPDEST PUSH2 0x4F9 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0x508 JUMPI POP PUSH2 0x508 CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x552 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x5A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x604 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x64D PUSH1 0x38 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x7794EFF834D760583543E6E510E717A5E66D2C064E225F4DB448343C3E66AFCF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x707 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6E9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x707 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6E9 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x78F CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x7E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x82F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x890 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x8CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x38 SLOAD DUP2 LT ISZERO PUSH2 0x9B4 JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x8EB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x9AC JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x92A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x38 DUP1 SLOAD PUSH1 0x37 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x970 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE SWAP4 DUP4 MSTORE SWAP2 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x8D0 JUMP JUMPDEST POP PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A CALLER PUSH1 0x38 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0xA40 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA22 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xA5B PUSH1 0x38 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xA71 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0xA7B JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0xABF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xADA JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xB2B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xB84 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xBC8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBD4 PUSH1 0x39 DUP4 DUP4 PUSH2 0x1E1B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP4 DUP3 MSTORE PUSH32 0xFBC0E5CA6C7E4858DAF0FDB185EF5186203E74EC9C64737E93C0AEAEC596E1D1 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH2 0xC43 SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1644 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP JUMP JUMPDEST PUSH2 0xC97 CALLER PUSH2 0x1BD4 JUMP JUMPDEST PUSH2 0xCE1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xD3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xDA4 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0xDAE JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0xDF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xE5E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xF7A JUMPI PUSH2 0xEB7 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEAA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1BD4 JUMP JUMPDEST ISZERO PUSH2 0xF02 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF19 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xF72 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0xE92 JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xFD4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x1018 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1024 PUSH1 0x38 DUP5 DUP5 PUSH2 0x1E1B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE PUSH32 0x9C80B3B5F68B3E017766D59E8D09B34EFE6462B05C398F35CAB9E271D9BC3B9C SWAP3 DUP7 SWAP3 DUP7 SWAP3 PUSH2 0x1091 SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1644 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x10F5 CALLER PUSH2 0x1BD4 JUMP JUMPDEST PUSH2 0x113F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x119D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x11E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EE6 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x123B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x12BE CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x130F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1363 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x13C4 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x1401 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x39 SLOAD DUP2 LT ISZERO PUSH2 0x158F JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x141F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1587 JUMPI PUSH1 0x0 PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x145F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE JUMPDEST PUSH1 0x37 SLOAD PUSH2 0x14A9 SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1C7C AND JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1571 JUMPI PUSH1 0x39 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x14BD JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x14E3 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1569 JUMPI PUSH1 0x37 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x1510 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x1536 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x1571 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1495 JUMP JUMPDEST POP PUSH1 0x37 DUP1 SLOAD SWAP1 PUSH2 0x1585 SWAP1 PUSH1 0x0 NOT DUP4 ADD PUSH2 0x1E7E JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1404 JUMP JUMPDEST POP PUSH32 0xD218C430FA348F4CE67791021B6B89C0C3EACD4EAD1D8F5B83C60038EC28249B CALLER PUSH1 0x39 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x161B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x15FD JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1636 PUSH1 0x39 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1677 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x165F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x16A7 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0x16B6 JUMPI POP PUSH2 0x16B6 CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x1700 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1754 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17B5 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x17F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x17FE PUSH1 0x39 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x13C935EB475AA0F6E931FECE83E2AC44569CE2D53460D29A6DEDAB40B965C8A3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x37 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1854 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x188B CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0x1895 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x18D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x19E8 JUMPI PUSH2 0x1925 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEAA JUMPI INVALID JUMPDEST ISZERO PUSH2 0x1970 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1987 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x19E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x190D JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1A3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1DDA1A5D195B1A5CDD081A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1B30 JUMPI PUSH1 0x36 PUSH1 0x0 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x1A5A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE POP DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1B28 JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1A96 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x37 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x1AEB JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1A42 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 DUP2 MSTORE PUSH1 0x37 DUP1 SLOAD SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A SWAP5 SWAP3 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP5 SWAP1 DUP1 ISZERO PUSH2 0x1BC0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1BA2 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BF5 PUSH1 0x34 SLOAD PUSH2 0x1CD9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x1CD3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D39 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1E18 SWAP2 SWAP1 PUSH2 0x1EA7 JUMP JUMPDEST POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1E6E JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1E6E JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 CALLDATALOAD AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1E3B JUMP JUMPDEST POP PUSH2 0x1E7A SWAP3 SWAP2 POP PUSH2 0x1EC1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1EA2 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1EA7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x6A3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0x6A3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E7A JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1EC7 JUMP INVALID PUSH16 0x776E65722063616E6E6F742062652073 PUSH6 0x7420746F207A PUSH6 0x726F20616464 PUSH19 0x6573736E6F6E2D6D61746368696E672070656E PUSH5 0x696E672077 PUSH9 0x6974656C6973742068 PUSH2 0x7368 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC8 DUP5 DELEGATECALL CODESIZE 0x2F CALLER SWAP1 SAR PUSH20 0x6F909BD6AEE12CCEE90702059E7FBBC13739643E 0xA9 0xC7 RETURN PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "2400:8868:31:-;;;1311:82:25;;;-1:-1:-1;;;;;;1311:82:25;1350:42;1311:82;;;1162:66:24;1312:58;;2400:8868:31;5:2:-1;;;;30:1;27;20:12;5:2;2400:8868:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101375760003560e01c80637fd004fa116100b8578063cd7958dd1161007c578063cd7958dd14610385578063ce0b5bd514610438578063d251fefc14610455578063de212bf314610472578063e2b4ce971461047a578063f42176481461048257610137565b80637fd004fa146102bc5780638da5cb5b1461032a578063b242e53414610332578063be40ba7914610360578063cbd2ac681461036857610137565b806347b55a9d116100ff57806347b55a9d146101fd5780635adc02ab146102055780636137d67014610222578063715018a6146102905780637d73b2311461029857610137565b8063100f23fd1461013c5780632121dc751461015b57806326d05ab214610177578063294f40251461017f57806332531c3c146101d7575b600080fd5b6101596004803603602081101561015257600080fd5b50356104f0565b005b610163610695565b604080519115158252519081900360200190f35b6101636106a6565b6101876106af565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101c35781810151838201526020016101ab565b505050509050019250505060405180910390f35b610163600480360360208110156101ed57600080fd5b50356001600160a01b0316610711565b610187610726565b6101596004803603602081101561021b57600080fd5b5035610786565b6101596004803603602081101561023857600080fd5b810190602081018135600160201b81111561025257600080fd5b82018360208201111561026457600080fd5b803590602001918460208302840111600160201b8311171561028557600080fd5b509092509050610a68565b610159610c8e565b6102a0610d8c565b604080516001600160a01b039092168252519081900360200190f35b610159600480360360208110156102d257600080fd5b810190602081018135600160201b8111156102ec57600080fd5b8201836020820111156102fe57600080fd5b803590602001918460208302840111600160201b8311171561031f57600080fd5b509092509050610d9b565b6102a06110dd565b6101596004803603604081101561034857600080fd5b506001600160a01b03813516906020013515156110ec565b6101636112a6565b6101596004803603602081101561037e57600080fd5b50356112b5565b6104266004803603602081101561039b57600080fd5b810190602081018135600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460208302840111600160201b831117156103e857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611644945050505050565b60408051918252519081900360200190f35b6101596004803603602081101561044e57600080fd5b503561169e565b6102a06004803603602081101561046b57600080fd5b5035611847565b61016361186e565b61042661187c565b6101596004803603602081101561049857600080fd5b810190602081018135600160201b8111156104b257600080fd5b8201836020820111156104c457600080fd5b803590602001918460208302840111600160201b831117156104e557600080fd5b509092509050611882565b6104f933611bd4565b80610508575061050833611be8565b610552576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a5460ff166105a1576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61060460388054806020026020016040519081016040528092919081815260200182805480156105fa57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105dc575b5050505050611644565b81146106415760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b61064d60386000611dfa565b603a805460ff19169055604080513381526020810183905281517f7794eff834d760583543e6e510e717a5e66d2c064e225f4db448343c3e66afcf929181900390910190a150565b603554600160a01b900460ff165b90565b603a5460ff1681565b6060603980548060200260200160405190810160405280929190818152602001828054801561070757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106e9575b5050505050905090565b60366020526000908152604090205460ff1681565b60606038805480602002602001604051908101604052809291908181526020018280548015610707576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116106e9575050505050905090565b61078f33611be8565b6107e0576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b603a5460ff1661082f576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61089060388054806020026020016040519081016040528092919081815260200182805480156105fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105dc575050505050611644565b81146108cd5760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b60005b6038548110156109b45760366000603883815481106108eb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166109ac576001603660006038848154811061092a57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560388054603791908390811061097057fe5b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b6001016108d0565b507fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a33603860405180836001600160a01b03166001600160a01b03168152602001806020018281038252838181548152602001915080548015610a4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a22575b5050935050505060405180910390a1610a5b60386000611dfa565b50603a805460ff19169055565b610a7133611bd4565b80610a7b57503330145b610abf576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015610ada5750603a54610100900460ff16155b610b2b576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b603a5462010000900460ff16610b84576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b80610bc8576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b610bd460398383611e1b565b50603a805461ff00191661010017905560408051602080840282810182019093528382527ffbc0e5ca6c7e4858daf0fdb185ef5186203e74ec9c64737e93c0aeaec596e1d19285928592610c439285918591829185019084908082843760009201919091525061164492505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b610c9733611bd4565b610ce1576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16610d3f576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b610da433611bd4565b80610dae57503330145b610df2576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015610e0d5750603a54610100900460ff16155b610e5e576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015610f7a57610eb7828281518110610eaa57fe5b6020026020010151611bd4565b15610f02576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110610f1957fe5b60200260200101516001600160a01b03161415610f72576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101610e92565b50603a5462010000900460ff16610fd4576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b81611018576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b61102460388484611e1b565b50603a805460ff1916600117905560408051602080850282810182019093528482527f9c80b3b5f68b3e017766d59e8d09b34efe6462b05c398f35cab9e271d9bc3b9c92869286926110919285918591829185019084908082843760009201919091525061164492505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6035546001600160a01b031690565b6110f533611bd4565b61113f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff1661119d576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166111e25760405162461bcd60e51b8152600401808060200182810382526023815260200180611ee66023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061123b57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603a5462010000900460ff1681565b6112be33611be8565b61130f576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b603a54610100900460ff16611363576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6113c460398054806020026020016040519081016040528092919081815260200182805480156105fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105dc575050505050611644565b81146114015760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b60005b60395481101561158f57603660006039838154811061141f57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611587576000603660006039848154811061145f57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091555b6037546114a990600163ffffffff611c7c16565b81101561157157603982815481106114bd57fe5b600091825260209091200154603780546001600160a01b0390921691839081106114e357fe5b6000918252602090912001546001600160a01b031614156115695760378054600019810190811061151057fe5b600091825260209091200154603780546001600160a01b03909216918390811061153657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611571565b600101611495565b506037805490611585906000198301611e7e565b505b600101611404565b507fd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b33603960405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818154815260200191508054801561161b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115fd575b5050935050505060405180910390a161163660396000611dfa565b50603a805461ff0019169055565b60008160405160200180828051906020019060200280838360005b8381101561167757818101518382015260200161165f565b50505050905001915050604051602081830303815290604052805190602001209050919050565b6116a733611bd4565b806116b657506116b633611be8565b611700576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a54610100900460ff16611754576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6117b560398054806020026020016040519081016040528092919081815260200182805480156105fa576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105dc575050505050611644565b81146117f25760405162461bcd60e51b8152600401808060200182810382526023815260200180611f096023913960400191505060405180910390fd5b6117fe60396000611dfa565b603a805461ff0019169055604080513381526020810183905281517f13c935eb475aa0f6e931fece83e2ac44569ce2d53460d29a6dedab40b965c8a3929181900390910190a150565b6037818154811061185457fe5b6000918252602090912001546001600160a01b0316905081565b603a54610100900460ff1681565b60345490565b61188b33611bd4565b8061189557503330145b6118d9576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b81518110156119e857611925828281518110610eaa57fe5b15611970576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b031682828151811061198757fe5b60200260200101516001600160a01b031614156119e0576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b60010161190d565b50603a5462010000900460ff1615611a3f576040805162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081a5b9a5d1a585b1a5e9959605a1b604482015290519081900360640190fd5b60005b82811015611b305760366000858584818110611a5a57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff16611b2857600160366000868685818110611a9657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506037848483818110611aeb57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055505b600101611a42565b50603a805462ff0000191662010000179055604080513380825260208201838152603780549484018590527fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a9492939092909190606083019084908015611bc057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ba2575b5050935050505060405180910390a1505050565b6035546001600160a01b0390811691161490565b6000611bf5603454611cd9565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611c4a57600080fd5b505afa158015611c5e573d6000803e3d6000fd5b505050506040513d6020811015611c7457600080fd5b505192915050565b600082821115611cd3576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6033546000906001600160a01b0316611d39576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015611d8557600080fd5b505afa158015611d99573d6000803e3d6000fd5b505050506040513d6020811015611daf57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015611c4a57600080fd5b5080546000825590600052602060002090810190611e189190611ea7565b50565b828054828255906000526020600020908101928215611e6e579160200282015b82811115611e6e5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611e3b565b50611e7a929150611ec1565b5090565b815481835581811115611ea257600083815260209020611ea2918101908301611ea7565b505050565b6106a391905b80821115611e7a5760008155600101611ead565b6106a391905b80821115611e7a5780546001600160a01b0319168155600101611ec756fe6f776e65722063616e6e6f742062652073657420746f207a65726f20616464726573736e6f6e2d6d61746368696e672070656e64696e672077686974656c6973742068617368a265627a7a72315820c884f4382f33901d736f909bd6aee12ccee90702059e7fbbc13739643ea9c7f364736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x137 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7FD004FA GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xCD7958DD GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xCD7958DD EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xCE0B5BD5 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xD251FEFC EQ PUSH2 0x455 JUMPI DUP1 PUSH4 0xDE212BF3 EQ PUSH2 0x472 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x47A JUMPI DUP1 PUSH4 0xF4217648 EQ PUSH2 0x482 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x7FD004FA EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x32A JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x332 JUMPI DUP1 PUSH4 0xBE40BA79 EQ PUSH2 0x360 JUMPI DUP1 PUSH4 0xCBD2AC68 EQ PUSH2 0x368 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x47B55A9D GT PUSH2 0xFF JUMPI DUP1 PUSH4 0x47B55A9D EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x5ADC02AB EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x6137D670 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x298 JUMPI PUSH2 0x137 JUMP JUMPDEST DUP1 PUSH4 0x100F23FD EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x15B JUMPI DUP1 PUSH4 0x26D05AB2 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x294F4025 EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0x32531C3C EQ PUSH2 0x1D7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x4F0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x163 PUSH2 0x695 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x163 PUSH2 0x6A6 JUMP JUMPDEST PUSH2 0x187 PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1AB JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x163 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x711 JUMP JUMPDEST PUSH2 0x187 PUSH2 0x726 JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x786 JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xA68 JUMP JUMPDEST PUSH2 0x159 PUSH2 0xC8E JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0xD8C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x10EC JUMP JUMPDEST PUSH2 0x163 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x12B5 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1644 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x169E JUMP JUMPDEST PUSH2 0x2A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x46B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1847 JUMP JUMPDEST PUSH2 0x163 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x187C JUMP JUMPDEST PUSH2 0x159 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x4B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x4C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1882 JUMP JUMPDEST PUSH2 0x4F9 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0x508 JUMPI POP PUSH2 0x508 CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x552 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x5A1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x604 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x64D PUSH1 0x38 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x7794EFF834D760583543E6E510E717A5E66D2C064E225F4DB448343C3E66AFCF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x707 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6E9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x707 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x6E9 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x78F CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x7E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x82F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x890 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x8CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x38 SLOAD DUP2 LT ISZERO PUSH2 0x9B4 JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x8EB JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x9AC JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x92A JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x38 DUP1 SLOAD PUSH1 0x37 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x970 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE SWAP4 DUP4 MSTORE SWAP2 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x8D0 JUMP JUMPDEST POP PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A CALLER PUSH1 0x38 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0xA40 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA22 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xA5B PUSH1 0x38 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xA71 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0xA7B JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0xABF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xADA JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xB2B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xB84 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xBC8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0xBD4 PUSH1 0x39 DUP4 DUP4 PUSH2 0x1E1B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP4 DUP3 MSTORE PUSH32 0xFBC0E5CA6C7E4858DAF0FDB185EF5186203E74EC9C64737E93C0AEAEC596E1D1 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH2 0xC43 SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1644 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP JUMP JUMPDEST PUSH2 0xC97 CALLER PUSH2 0x1BD4 JUMP JUMPDEST PUSH2 0xCE1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xD3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xDA4 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0xDAE JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0xDF2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0xE5E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xF7A JUMPI PUSH2 0xEB7 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEAA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1BD4 JUMP JUMPDEST ISZERO PUSH2 0xF02 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF19 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xF72 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0xE92 JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xFD4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x1018 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1024 PUSH1 0x38 DUP5 DUP5 PUSH2 0x1E1B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE PUSH32 0x9C80B3B5F68B3E017766D59E8D09B34EFE6462B05C398F35CAB9E271D9BC3B9C SWAP3 DUP7 SWAP3 DUP7 SWAP3 PUSH2 0x1091 SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1644 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x10F5 CALLER PUSH2 0x1BD4 JUMP JUMPDEST PUSH2 0x113F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x119D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x11E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1EE6 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x123B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x12BE CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x130F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1363 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x13C4 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x1401 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x39 SLOAD DUP2 LT ISZERO PUSH2 0x158F JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x141F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1587 JUMPI PUSH1 0x0 PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x145F JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE JUMPDEST PUSH1 0x37 SLOAD PUSH2 0x14A9 SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x1C7C AND JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1571 JUMPI PUSH1 0x39 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x14BD JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x14E3 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1569 JUMPI PUSH1 0x37 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x1510 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x1536 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x1571 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1495 JUMP JUMPDEST POP PUSH1 0x37 DUP1 SLOAD SWAP1 PUSH2 0x1585 SWAP1 PUSH1 0x0 NOT DUP4 ADD PUSH2 0x1E7E JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1404 JUMP JUMPDEST POP PUSH32 0xD218C430FA348F4CE67791021B6B89C0C3EACD4EAD1D8F5B83C60038EC28249B CALLER PUSH1 0x39 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x161B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x15FD JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1636 PUSH1 0x39 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1677 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x165F JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x16A7 CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0x16B6 JUMPI POP PUSH2 0x16B6 CALLER PUSH2 0x1BE8 JUMP JUMPDEST PUSH2 0x1700 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1754 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x17B5 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5FA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5DC JUMPI POP POP POP POP POP PUSH2 0x1644 JUMP JUMPDEST DUP2 EQ PUSH2 0x17F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x1F09 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x17FE PUSH1 0x39 PUSH1 0x0 PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x13C935EB475AA0F6E931FECE83E2AC44569CE2D53460D29A6DEDAB40B965C8A3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x37 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1854 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x188B CALLER PUSH2 0x1BD4 JUMP JUMPDEST DUP1 PUSH2 0x1895 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x18D9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x19E8 JUMPI PUSH2 0x1925 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEAA JUMPI INVALID JUMPDEST ISZERO PUSH2 0x1970 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1987 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x19E0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x190D JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1A3F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1DDA1A5D195B1A5CDD081A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1B30 JUMPI PUSH1 0x36 PUSH1 0x0 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x1A5A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE POP DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1B28 JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1A96 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x37 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x1AEB JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1A42 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 DUP2 MSTORE PUSH1 0x37 DUP1 SLOAD SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A SWAP5 SWAP3 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP5 SWAP1 DUP1 ISZERO PUSH2 0x1BC0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1BA2 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BF5 PUSH1 0x34 SLOAD PUSH2 0x1CD9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x1CD3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D39 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1E18 SWAP2 SWAP1 PUSH2 0x1EA7 JUMP JUMPDEST POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1E6E JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1E6E JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 CALLDATALOAD AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1E3B JUMP JUMPDEST POP PUSH2 0x1E7A SWAP3 SWAP2 POP PUSH2 0x1EC1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x1EA2 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0x1EA7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x6A3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E7A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1EAD JUMP JUMPDEST PUSH2 0x6A3 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E7A JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1EC7 JUMP INVALID PUSH16 0x776E65722063616E6E6F742062652073 PUSH6 0x7420746F207A PUSH6 0x726F20616464 PUSH19 0x6573736E6F6E2D6D61746368696E672070656E PUSH5 0x696E672077 PUSH9 0x6974656C6973742068 PUSH2 0x7368 LOG2 PUSH6 0x627A7A723158 KECCAK256 0xC8 DUP5 DELEGATECALL CODESIZE 0x2F CALLER SWAP1 SAR PUSH20 0x6F909BD6AEE12CCEE90702059E7FBBC13739643E 0xA9 0xC7 RETURN PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "2400:8868:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2400:8868:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3935:677;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3935:677:31;;:::i;:::-;;2749:94:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;3121:38:31;;;:::i;8339:124::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8339:124:31;;;;;;;;;;;;;;;;;2937:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2937:44:31;-1:-1:-1;;;;;2937:44:31;;:::i;8160:126::-;;;:::i;5562:1117::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5562:1117:31;;:::i;10379:673::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10379:673:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;10379:673:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10379:673:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;10379:673:31;;-1:-1:-1;10379:673:31;-1:-1:-1;10379:673:31;:::i;3119:306:26:-;;;:::i;1695:89:25:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1695:89:25;;;;;;;;;;;;;;9544:711:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9544:711:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;9544:711:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9544:711:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;9544:711:31;;-1:-1:-1;9544:711:31;-1:-1:-1;9544:711:31;:::i;3508:85:26:-;;;:::i;1823:809::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;3208:26:31:-;;;:::i;6748:1358::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6748:1358:31;;:::i;11121:145::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11121:145:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;11121:145:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11121:145:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11121:145:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11121:145:31;;-1:-1:-1;11121:145:31;;-1:-1:-1;;;;;11121:145:31:i;:::-;;;;;;;;;;;;;;;;4680:659;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4680:659:31;;:::i;2987:31::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2987:31:31;;:::i;3165:37::-;;;:::i;1778:95:24:-;;;:::i;8594:827:31:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8594:827:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8594:827:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8594:827:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;8594:827:31;;-1:-1:-1;8594:827:31;-1:-1:-1;8594:827:31;:::i;3935:677::-;1608:20;1617:10;1608:8;:20::i;:::-;:49;;;;1632:25;1646:10;1632:13;:25::i;:::-;1600:84;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;;;;4082:26;;;;4074:60;;;;;-1:-1:-1;;;4074:60:31;;;;;;;;;;;;-1:-1:-1;;;4074:60:31;;;;;;;;;;;;;;;4256:40;4270:25;4256:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4256:40:31;;;;;;;;;;;;;;;;;;;;;:13;:40::i;:::-;4247:5;:49;4239:97;;;;-1:-1:-1;;;4239:97:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4382:32;4389:25;;4382:32;:::i;:::-;4471:26;:34;;-1:-1:-1;;4471:34:31;;;4560:45;;;4587:10;4560:45;;;;;;;;;;;;;;;;;;;;;3935:677;:::o;2749:94:26:-;2821:15;;-1:-1:-1;;;2821:15:26;;;;2749:94;;:::o;3121:38:31:-;;;;;;:::o;8339:124::-;8397:16;8432:24;8425:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8425:31:31;;;;;;;;;;;;;;;;;;;;;;;8339:124;:::o;2937:44::-;;;;;;;;;;;;;;;:::o;8160:126::-;8219:16;8254:25;8247:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8247:32:31;;;;;;;;;;;;;;;;;;;;;;8160:126;:::o;5562:1117::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;5720:26:31;;;;5712:60;;;;;-1:-1:-1;;;5712:60:31;;;;;;;;;;;;-1:-1:-1;;;5712:60:31;;;;;;;;;;;;;;;5894:40;5908:25;5894:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5894:40:31;;;;;;;;;;;;;;;;;;;;:13;:40::i;:::-;5885:5;:49;5877:97;;;;-1:-1:-1;;;5877:97:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6029:9;6024:383;6048:25;:32;6044:36;;6024:383;;;6156:12;:42;6169:25;6195:1;6169:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6169:28:31;6156:42;;;;;;;;;;;;;;;6151:246;;6311:4;6266:12;:42;6279:25;6305:1;6279:28;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6279:28:31;6266:42;;;;;;;;;;;;:49;;-1:-1:-1;;6266:49:31;;;;;;;;;;6353:25;:28;;6333:14;;6353:25;6379:1;;6353:28;;;;;;;;;;;;;;;;;;27:10:-1;;6353:28:31;23:18:-1;;45:23;;6333:49:31;;;;;;;;;;-1:-1:-1;;;;;;6333:49:31;-1:-1:-1;;;;;6353:28:31;;;6333:49;;;;;;6151:246;6082:3;;6024:383;;;;6457:55;6474:10;6486:25;6457:55;;;;-1:-1:-1;;;;;6457:55:31;-1:-1:-1;;;;;6457:55:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6457:55:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6558:32;6565:25;;6558:32;:::i;:::-;-1:-1:-1;6638:26:31;:34;;-1:-1:-1;;6638:34:31;;;5562:1117::o;10379:673::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;3774:26;;;;3773:27;:57;;;;-1:-1:-1;3805:25:31;;;;;;;3804:26;3773:57;3765:98;;;;;-1:-1:-1;;;3765:98:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;10564:14;;;;;;;10556:52;;;;;-1:-1:-1;;;10556:52:31;;;;;;;;;;;;-1:-1:-1;;;10556:52:31;;;;;;;;;;;;;;;10686:21;10678:49;;;;;-1:-1:-1;;;10678:49:31;;;;;;;;;;;;-1:-1:-1;;;10678:49:31;;;;;;;;;;;;;;;10805:37;:24;10832:10;;10805:37;:::i;:::-;-1:-1:-1;10896:25:31;:32;;-1:-1:-1;;10896:32:31;;;;;11019:25;;;;;;;;;;;;;;;;;;10981:64;;11007:10;;;;11019:25;;11007:10;;;;;;11019:25;;;11007:10;;11019:25;11007:10;11019:25;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;11019:13:31;;-1:-1:-1;;;11019:25:31:i;:::-;10981:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;10981:64:31;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;10981:64:31;;;;-1:-1:-1;10981:64:31;;-1:-1:-1;;;;;10981:64:31;10379:673;;:::o;3119:306:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;1695:89:25:-;1765:12;;-1:-1:-1;;;;;1765:12:25;1695:89;:::o;9544:711:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;3774:26;;;;3773:27;:57;;;;-1:-1:-1;3805:25:31;;;;;;;3804:26;3773:57;3765:98;;;;;-1:-1:-1;;;3765:98:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;9676:10;;3333:293;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;;;3405:204:31;3429:10;:17;3425:1;:21;3405:204;;;3476:23;3485:10;3496:1;3485:13;;;;;;;;;;;;;;3476:8;:23::i;:::-;3475:24;3467:59;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;;;;3573:1;-1:-1:-1;;;;;3548:27:31;:10;3559:1;3548:13;;;;;;;;;;;;;;-1:-1:-1;;;;;3548:27:31;;;3540:58;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;;;;3448:3;;3405:204;;;-1:-1:-1;9766:14:31;;;;;;;9758:52;;;;;-1:-1:-1;;;9758:52:31;;;;;;;;;;;;-1:-1:-1;;;9758:52:31;;;;;;;;;;;;;;;9881:21;9873:49;;;;;-1:-1:-1;;;9873:49:31;;;;;;;;;;;;-1:-1:-1;;;9873:49:31;;;;;;;;;;;;;;;10005:38;:25;10033:10;;10005:38;:::i;:::-;-1:-1:-1;10097:26:31;:33;;-1:-1:-1;;10097:33:31;10126:4;10097:33;;;10222:25;;;;;;;;;;;;;;;;;;10183:65;;10210:10;;;;10222:25;;10210:10;;;;;;10222:25;;;10210:10;;10222:25;10210:10;10222:25;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;10222:13:31;;-1:-1:-1;;;10222:25:31:i;:::-;10183:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;10183:65:31;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;10183:65:31;;;;-1:-1:-1;10183:65:31;;-1:-1:-1;;;;;10183:65:31;3873:1;9544:711;;:::o;3508:85:26:-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;1823:809::-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;3208:26:31:-;;;;;;;;;:::o;6748:1358::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;6935:25:31;;;;;;;6927:59;;;;;-1:-1:-1;;;6927:59:31;;;;;;;;;;;;-1:-1:-1;;;6927:59:31;;;;;;;;;;;;;;;7107:39;7121:24;7107:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7107:39:31;;;;;;;;;;;;;;;;;;;;:13;:39::i;:::-;7098:5;:48;7090:96;;;;-1:-1:-1;;;7090:96:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7238:9;7233:601;7257:24;:31;7253:35;;7233:601;;;7347:12;:41;7360:24;7385:1;7360:27;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7360:27:31;7347:41;;;;;;;;;;;;;;;7343:481;;;7452:5;7408:12;:41;7421:24;7446:1;7421:27;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7421:27:31;7408:41;;;;;;;;;;;;:49;;-1:-1:-1;;7408:49:31;;;;;;;;;;;7475:294;7499:14;:21;:28;;7525:1;7499:28;:25;:28;:::i;:::-;7495:1;:32;7475:294;;;7581:24;7606:1;7581:27;;;;;;;;;;;;;;;;;;7560:14;:17;;-1:-1:-1;;;;;7581:27:31;;;;7575:1;;7560:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7560:17:31;:48;7556:195;;;7656:14;7671:21;;-1:-1:-1;;7671:25:31;;;7656:41;;;;;;;;;;;;;;;;7636:14;:17;;-1:-1:-1;;;;;7656:41:31;;;;7651:1;;7636:17;;;;;;;;;;;;;;:61;;;;;-1:-1:-1;;;;;7636:61:31;;;;;-1:-1:-1;;;;;7636:61:31;;;;;;7723:5;;7556:195;7529:3;;7475:294;;;-1:-1:-1;7786:14:31;:23;;;;;-1:-1:-1;;7786:23:31;;;:::i;:::-;;7343:481;7290:3;;7233:601;;;;7883:58;7904:10;7916:24;7883:58;;;;-1:-1:-1;;;;;7883:58:31;-1:-1:-1;;;;;7883:58:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7883:58:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7987:31;7994:24;;7987:31;:::i;:::-;-1:-1:-1;8066:25:31;:33;;-1:-1:-1;;8066:33:31;;;6748:1358::o;11121:145::-;11194:7;11247:10;11230:28;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11230:28:31;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11230:28:31;;;11220:39;;;;;;11213:46;;11121:145;;;:::o;4680:659::-;1608:20;1617:10;1608:8;:20::i;:::-;:49;;;;1632:25;1646:10;1632:13;:25::i;:::-;1600:84;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;;;;4826:25;;;;;;;4818:59;;;;;-1:-1:-1;;;4818:59:31;;;;;;;;;;;;-1:-1:-1;;;4818:59:31;;;;;;;;;;;;;;;4998:39;5012:24;4998:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4998:39:31;;;;;;;;;;;;;;;;;;;;:13;:39::i;:::-;4989:5;:48;4981:96;;;;-1:-1:-1;;;4981:96:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5123:31;5130:24;;5123:31;:::i;:::-;5200:25;:33;;-1:-1:-1;;5200:33:31;;;5288:44;;;5314:10;5288:44;;;;;;;;;;;;;;;;;;;;;4680:659;:::o;2987:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2987:31:31;;-1:-1:-1;2987:31:31;:::o;3165:37::-;;;;;;;;;:::o;1778:95:24:-;1851:15;;1778:95;:::o;8594:827:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;8696:10;;3333:293;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;;;3405:204:31;3429:10;:17;3425:1;:21;3405:204;;;3476:23;3485:10;3496:1;3485:13;;;;;;;3476:23;3475:24;3467:59;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;;;;3573:1;-1:-1:-1;;;;;3548:27:31;:10;3559:1;3548:13;;;;;;;;;;;;;;-1:-1:-1;;;;;3548:27:31;;;3540:58;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;;;;3448:3;;3405:204;;;-1:-1:-1;8791:14:31;;;;;;;8790:15;8782:49;;;;;-1:-1:-1;;;8782:49:31;;;;;;;;;;;;-1:-1:-1;;;8782:49:31;;;;;;;;;;;;;;;8910:9;8905:384;8925:21;;;8905:384;;;9035:12;:27;9048:10;;9059:1;9048:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9048:13:31;9035:27;;-1:-1:-1;9035:27:31;;;;;;;;-1:-1:-1;9035:27:31;;;;9030:249;;9161:4;9131:12;:27;9144:10;;9155:1;9144:13;;;;;;;;;;;;;-1:-1:-1;;;;;9144:13:31;-1:-1:-1;;;;;9131:27:31;-1:-1:-1;;;;;9131:27:31;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;9230:14;9250:10;;9261:1;9250:13;;;;;;;27:10:-1;;39:1;23:18;;45:23;;-1:-1;9230:34:31;;;9250:13;9230:34;;;;;;;-1:-1:-1;;;;;;9230:34:31;-1:-1:-1;;;;;9250:13:31;;;;;;;;;;;;;9230:34;;;;;;-1:-1:-1;9030:249:31;8948:3;;8905:384;;;-1:-1:-1;9298:14:31;:21;;-1:-1:-1;;9298:21:31;;;;;9370:44;;;9387:10;9370:44;;;;;;;;;9399:14;9370:44;;;;;;;;;;9387:10;;9399:14;;9370:44;;;;;;;9399:14;;9370:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9370:44:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:1;8594:827;;:::o;4191:107:26:-;4285:6;;-1:-1:-1;;;;;4285:6:26;;;4273:18;;;;4191:107::o;2393:158:24:-;2457:4;2492:28;2504:15;;2492:11;:28::i;:::-;-1:-1:-1;;;;;2480:54:24;;2535:8;2480:64;;;;;;;;;;;;;-1:-1:-1;;;;;2480:64:24;-1:-1:-1;;;;;2480:64:24;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2480:64:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2480:64:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2480:64:24;;2393:158;-1:-1:-1;;2393:158:24:o;1274:179:6:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:6;;;1274:179::o;1971:165:25:-;1549:12;;2042:7;;-1:-1:-1;;;;;1549:12:25;1541:68;;;;;-1:-1:-1;;;1541:68:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:12;;2083:33;;;-1:-1:-1;;;2083:33:25;;;;;;;;;;-1:-1:-1;;;;;2087:12:25;;;;2083:26;;:33;;;;;;;;;;;;;;;2087:12;2083:33;;;5:2:-1;;;;30:1;27;20:12;5:2;2083:33:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2083:33:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2083:33:25;2068:61;;;-1:-1:-1;;;2068:61:25;;;;;;;;;;-1:-1:-1;;;;;2068:54:25;;;;;;:61;;;;;2083:33;;2068:61;;;;;;;;:54;:61;;;5:2:-1;;;;30:1;27;20:12;2400:8868:31;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2400:8868:31;-1:-1:-1;;;;;2400:8868:31;;;;;;;;;;;;;;;;;;;-1:-1:-1;2400:8868:31;;;-1:-1:-1;2400:8868:31;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2400:8868:31;;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "1606400", + "executionCost": "42522", + "totalCost": "1648922" + }, + "external": { + "calculateHash(address[])": "infinite", + "cancelWhitelistAddition(bytes32)": "infinite", + "cancelWhitelistRemoval(bytes32)": "infinite", + "confirmWhitelistAddition(bytes32)": "infinite", + "confirmWhitelistRemoval(bytes32)": "infinite", + "controllerNode()": "1108", + "ensRegistry()": "1148", + "isSetWhitelist()": "1110", + "isTransferable()": "1074", + "owner()": "1082", + "pendingWhitelistAddition()": "infinite", + "pendingWhitelistRemoval()": "infinite", + "renounceOwnership()": "24122", + "setWhitelist(address[])": "infinite", + "submitWhitelistAddition(address[])": "infinite", + "submitWhitelistRemoval(address[])": "infinite", + "submittedWhitelistAddition()": "1078", + "submittedWhitelistRemoval()": "1109", + "transferOwnership(address,bool)": "infinite", + "whitelistArray(uint256)": "2036", + "whitelistMap(address)": "1248" + } + }, + "methodIdentifiers": { + "calculateHash(address[])": "cd7958dd", + "cancelWhitelistAddition(bytes32)": "100f23fd", + "cancelWhitelistRemoval(bytes32)": "ce0b5bd5", + "confirmWhitelistAddition(bytes32)": "5adc02ab", + "confirmWhitelistRemoval(bytes32)": "cbd2ac68", + "controllerNode()": "e2b4ce97", + "ensRegistry()": "7d73b231", + "isSetWhitelist()": "be40ba79", + "isTransferable()": "2121dc75", + "owner()": "8da5cb5b", + "pendingWhitelistAddition()": "47b55a9d", + "pendingWhitelistRemoval()": "294f4025", + "renounceOwnership()": "715018a6", + "setWhitelist(address[])": "f4217648", + "submitWhitelistAddition(address[])": "7fd004fa", + "submitWhitelistRemoval(address[])": "6137d670", + "submittedWhitelistAddition()": "26d05ab2", + "submittedWhitelistRemoval()": "de212bf3", + "transferOwnership(address,bool)": "b242e534", + "whitelistArray(uint256)": "d251fefc", + "whitelistMap(address)": "32531c3c" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "AddedToWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "RemovedFromWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "calculateHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isSetWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistAddition", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistRemoval", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "setWhitelist", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistAddition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistRemoval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelistMap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/AddressWhitelist_metadata.json b/contracts/artifacts/AddressWhitelist_metadata.json new file mode 100644 index 00000000..06cf8d9f --- /dev/null +++ b/contracts/artifacts/AddressWhitelist_metadata.json @@ -0,0 +1,825 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "AddedToWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "RemovedFromWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "calculateHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isSetWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistAddition", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistRemoval", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "setWhitelist", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistAddition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistRemoval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelistMap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "details": "This contract will allow the user to maintain a whitelist of addressesThese addresses will live outside of the various spend limits", + "methods": { + "calculateHash(address[])": { + "details": "Method used to hash our whitelist address arrays." + }, + "cancelWhitelistAddition(bytes32)": { + "details": "Cancel pending whitelist addition." + }, + "cancelWhitelistRemoval(bytes32)": { + "details": "Cancel pending removal of whitelisted addresses." + }, + "confirmWhitelistAddition(bytes32)": { + "details": "Confirm pending whitelist addition.This will only ever be applied post 2FA, by one of the Controllers", + "params": { + "_hash": "is the hash of the pending whitelist array, a form of lamport lock" + } + }, + "confirmWhitelistRemoval(bytes32)": { + "details": "Confirm pending removal of whitelisted addresses." + }, + "controllerNode()": { + "return": "the controller node registered in ENS." + }, + "ensRegistry()": { + "return": "Current address of the ENS registry contract." + }, + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "owner()": { + "return": "address of the owner." + }, + "pendingWhitelistAddition()": { + "details": "Getter for pending addition array." + }, + "pendingWhitelistRemoval()": { + "details": "Getter for pending removal array." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "setWhitelist(address[])": { + "details": "Add initial addresses to the whitelist.", + "params": { + "_addresses": "are the Ethereum addresses to be whitelisted." + } + }, + "submitWhitelistAddition(address[])": { + "details": "Add addresses to the whitelist.", + "params": { + "_addresses": "are the Ethereum addresses to be whitelisted." + } + }, + "submitWhitelistRemoval(address[])": { + "details": "Remove addresses from the whitelist.", + "params": { + "_addresses": "are the Ethereum addresses to be removed." + } + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "AddressWhitelist provides payee-whitelist functionality." + }, + "userdoc": { + "methods": { + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "AddressWhitelist" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/ControllableOwnable.json b/contracts/artifacts/ControllableOwnable.json new file mode 100644 index 00000000..6e05786e --- /dev/null +++ b/contracts/artifacts/ControllableOwnable.json @@ -0,0 +1,205 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d589369760345534801561005557600080fd5b50610459806100656000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80632121dc7514610067578063715018a6146100835780637d73b2311461008d5780638da5cb5b146100b1578063b242e534146100b9578063e2b4ce97146100e7575b600080fd5b61006f610101565b604080519115158252519081900360200190f35b61008b610111565b005b61009561020f565b604080516001600160a01b039092168252519081900360200190f35b61009561021e565b61008b600480360360408110156100cf57600080fd5b506001600160a01b038135169060200135151561022d565b6100ef6103e7565b60408051918252519081900360200190f35b603554600160a01b900460ff1690565b61011a336103ed565b610164576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166101c2576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b6035546001600160a01b031690565b610236336103ed565b610280576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166102de576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166103235760405162461bcd60e51b81526004018080602001828103825260238152602001806104026023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061037c57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b60345490565b6035546001600160a01b039081169116149056fe6f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a723158200dcdbc78ca5b222781e7d9a7753108a2790dfba65254c7feeb9b89fb87c6748164736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH15 0xC2E074EC69A0DFB2997BA6C7D2E1E OR SWAP1 SSTORE PUSH32 0x7F2CE995617D2816B426C5C8698C5EC2952F7A34BB10F38326F74933D5893697 PUSH1 0x34 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x459 DUP1 PUSH2 0x65 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x83 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xB1 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0xE7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x101 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x8B PUSH2 0x111 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x95 PUSH2 0x20F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x21E JUMP JUMPDEST PUSH2 0x8B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x22D JUMP JUMPDEST PUSH2 0xEF PUSH2 0x3E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x11A CALLER PUSH2 0x3ED JUMP JUMPDEST PUSH2 0x164 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x236 CALLER PUSH2 0x3ED JUMP JUMPDEST PUSH2 0x280 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x402 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x37C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP INVALID PUSH16 0x776E65722063616E6E6F742062652073 PUSH6 0x7420746F207A PUSH6 0x726F20616464 PUSH19 0x657373A265627A7A723158200DCDBC78CA5B22 0x27 DUP2 0xE7 0xD9 0xA7 PUSH22 0x3108A2790DFBA65254C7FEEB9B89FB87C6748164736F PUSH13 0x63430005110032000000000000 ", + "sourceMap": "1425:279:31:-;;;1311:82:25;;;-1:-1:-1;;;;;;1311:82:25;1350:42;1311:82;;;1162:66:24;1312:58;;1425:279:31;5:2:-1;;;;30:1;27;20:12;5:2;1425:279:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c80632121dc7514610067578063715018a6146100835780637d73b2311461008d5780638da5cb5b146100b1578063b242e534146100b9578063e2b4ce97146100e7575b600080fd5b61006f610101565b604080519115158252519081900360200190f35b61008b610111565b005b61009561020f565b604080516001600160a01b039092168252519081900360200190f35b61009561021e565b61008b600480360360408110156100cf57600080fd5b506001600160a01b038135169060200135151561022d565b6100ef6103e7565b60408051918252519081900360200190f35b603554600160a01b900460ff1690565b61011a336103ed565b610164576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166101c2576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b6035546001600160a01b031690565b610236336103ed565b610280576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166102de576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166103235760405162461bcd60e51b81526004018080602001828103825260238152602001806104026023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061037c57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b60345490565b6035546001600160a01b039081169116149056fe6f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a723158200dcdbc78ca5b222781e7d9a7753108a2790dfba65254c7feeb9b89fb87c6748164736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x83 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xB1 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0xE7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x101 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x8B PUSH2 0x111 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x95 PUSH2 0x20F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x95 PUSH2 0x21E JUMP JUMPDEST PUSH2 0x8B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x22D JUMP JUMPDEST PUSH2 0xEF PUSH2 0x3E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x11A CALLER PUSH2 0x3ED JUMP JUMPDEST PUSH2 0x164 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x236 CALLER PUSH2 0x3ED JUMP JUMPDEST PUSH2 0x280 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2DE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x402 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x37C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP INVALID PUSH16 0x776E65722063616E6E6F742062652073 PUSH6 0x7420746F207A PUSH6 0x726F20616464 PUSH19 0x657373A265627A7A723158200DCDBC78CA5B22 0x27 DUP2 0xE7 0xD9 0xA7 PUSH22 0x3108A2790DFBA65254C7FEEB9B89FB87C6748164736F PUSH13 0x63430005110032000000000000 ", + "sourceMap": "1425:279:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1425:279:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2749:94:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;3119:306;;;:::i;:::-;;1695:89:25;;;:::i;:::-;;;;-1:-1:-1;;;;;1695:89:25;;;;;;;;;;;;;;3508:85:26;;;:::i;1823:809::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;1778:95:24:-;;;:::i;:::-;;;;;;;;;;;;;;;;2749:94:26;2821:15;;-1:-1:-1;;;2821:15:26;;;;;2749:94::o;3119:306::-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;1695:89:25:-;1765:12;;-1:-1:-1;;;;;1765:12:25;1695:89;:::o;3508:85:26:-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;1823:809::-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;1778:95:24:-;1851:15;;1778:95;:::o;4191:107:26:-;4285:6;;-1:-1:-1;;;;;4285:6:26;;;4273:18;;;;4191:107::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "222600", + "executionCost": "41105", + "totalCost": "263705" + }, + "external": { + "controllerNode()": "1086", + "ensRegistry()": "1059", + "isTransferable()": "1005", + "owner()": "1081", + "renounceOwnership()": "24033", + "transferOwnership(address,bool)": "infinite" + } + }, + "methodIdentifiers": { + "controllerNode()": "e2b4ce97", + "ensRegistry()": "7d73b231", + "isTransferable()": "2121dc75", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "transferOwnership(address,bool)": "b242e534" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/ControllableOwnable_metadata.json b/contracts/artifacts/ControllableOwnable_metadata.json new file mode 100644 index 00000000..86a3f62a --- /dev/null +++ b/contracts/artifacts/ControllableOwnable_metadata.json @@ -0,0 +1,426 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "providing an additional modifier to check if Owner or Controller", + "methods": { + "controllerNode()": { + "return": "the controller node registered in ENS." + }, + "ensRegistry()": { + "return": "Current address of the ENS registry contract." + }, + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "owner()": { + "return": "address of the owner." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "ControllableOwnable combines Controllable and Ownable" + }, + "userdoc": { + "methods": { + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "ControllableOwnable" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/DailyLimitTrait.json b/contracts/artifacts/DailyLimitTrait.json new file mode 100644 index 00000000..e54521fe --- /dev/null +++ b/contracts/artifacts/DailyLimitTrait.json @@ -0,0 +1,71 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820accf8d256322d05b8c1b4a49b3e753ad1efdce859a6724042b14b8ce6d9c93d164736f6c63430005110032", + "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xAC 0xCF DUP14 0x25 PUSH4 0x22D05B8C SHL 0x4A 0x49 0xB3 0xE7 MSTORE8 0xAD 0x1E REVERT 0xCE DUP6 SWAP11 PUSH8 0x24042B14B8CE6D9C SWAP4 0xD1 PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "11450:3455:31:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72315820accf8d256322d05b8c1b4a49b3e753ad1efdce859a6724042b14b8ce6d9c93d164736f6c63430005110032", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xAC 0xCF DUP14 0x25 PUSH4 0x22D05B8C SHL 0x4A 0x49 0xB3 0xE7 MSTORE8 0xAD 0x1E REVERT 0xCE DUP6 SWAP11 PUSH8 0x24042B14B8CE6D9C SWAP4 0xD1 PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "11450:3455:31:-;;;;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "17000", + "executionCost": "94", + "totalCost": "17094" + }, + "internal": { + "_confirmLimitUpdate(struct DailyLimitTrait.DailyLimit storage pointer,uint256)": "infinite", + "_enforceLimit(struct DailyLimitTrait.DailyLimit storage pointer,uint256)": "infinite", + "_getAvailableLimit(struct DailyLimitTrait.DailyLimit storage pointer)": "infinite", + "_modifyLimit(struct DailyLimitTrait.DailyLimit storage pointer,uint256)": "infinite", + "_setLimit(struct DailyLimitTrait.DailyLimit storage pointer,uint256)": "infinite", + "_submitLimitUpdate(struct DailyLimitTrait.DailyLimit storage pointer,uint256)": "infinite", + "_updateAvailableLimit(struct DailyLimitTrait.DailyLimit storage pointer)": "infinite" + } + }, + "methodIdentifiers": {} + }, + "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "UpdatedAvailableLimit", + "type": "event" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/DailyLimitTrait_metadata.json b/contracts/artifacts/DailyLimitTrait_metadata.json new file mode 100644 index 00000000..9f25ca96 --- /dev/null +++ b/contracts/artifacts/DailyLimitTrait_metadata.json @@ -0,0 +1,262 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "UpdatedAvailableLimit", + "type": "event" + } + ], + "devdoc": { + "methods": {}, + "title": "DailyLimitTrait This trait allows for daily limits to be included in other contracts. This contract will allow for a DailyLimit object to be instantiated and used." + }, + "userdoc": { + "methods": {} + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "DailyLimitTrait" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/GasTopUpLimit.json b/contracts/artifacts/GasTopUpLimit.json new file mode 100644 index 00000000..c16cfd7f --- /dev/null +++ b/contracts/artifacts/GasTopUpLimit.json @@ -0,0 +1,359 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d589369760345534801561005557600080fd5b50610be8806100656000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637d7d00461161008c578063cc0e7e5611610066578063cc0e7e56146101b0578063e2b4ce97146101b8578063f41c4319146101c0578063f776f518146101dd576100cf565b80637d7d0046146101725780638da5cb5b1461017a578063b242e53414610182576100cf565b80630f3a85d8146100d45780632121dc75146100f35780632587a6a21461010f578063715018a61461012957806374624c55146101315780637d73b2311461014e575b600080fd5b6100f1600480360360208110156100ea57600080fd5b50356101e5565b005b6100fb6102f1565b604080519115158252519081900360200190f35b610117610301565b60408051918252519081900360200190f35b6100f1610307565b6100f16004803603602081101561014757600080fd5b5035610405565b610156610509565b604080516001600160a01b039092168252519081900360200190f35b610117610518565b610156610529565b6100f16004803603604081101561019857600080fd5b506001600160a01b0381351690602001351515610538565b6101176106f2565b6101176106f8565b6100f1600480360360208110156101d657600080fd5b50356106fe565b6100fb610769565b6101ee33610772565b806101f857503330145b61023c576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561025b57506706f05b59d3b200008111155b6102a2576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b6102b360368263ffffffff61078916565b604080513381526020810183905281517f41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e929181900390910190a150565b603554600160a01b900460ff1690565b60365490565b61031033610772565b61035a576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166103b8576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b61040e33610772565b8061041857503330145b61045c576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561047b57506706f05b59d3b200008111155b6104c2576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b6104d360368263ffffffff6107f216565b6040805182815290517faf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c9181900360200190a150565b6033546001600160a01b031690565b60006105246036610853565b905090565b6035546001600160a01b031690565b61054133610772565b61058b576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166105e9576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b03821661062e5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b916023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061068757604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b60395490565b60345490565b61070733610888565b610758576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b6102b360368263ffffffff61091c16565b603a5460ff1690565b6035546001600160a01b038281169116145b919050565b600482015460ff16156107d7576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6107e18282610970565b50600401805460ff19166001179055565b600482015460ff1661084b576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b600281015460009061086e906201518063ffffffff61099316565b42111561087d57508054610784565b506001810154610784565b60006108956034546109f4565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156108ea57600080fd5b505afa1580156108fe573d6000803e3d6000fd5b505050506040513d602081101561091457600080fd5b505192915050565b8082600301541461095e5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b6f6022913960400191505060405180910390fd5b61096c828360030154610970565b5050565b61097982610b15565b808255600182015481101561096c57815460018301555050565b6000828201838110156109ed576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6033546000906001600160a01b0316610a54576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015610aa057600080fd5b505afa158015610ab4573d6000803e3d6000fd5b505050506040513d6020811015610aca57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156108ea57600080fd5b6002810154610b2d906201518063ffffffff61099316565b421115610b6b57426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a15b5056fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a7231582072b36c267117249562ebf93790121b8369ca191166dc07c34fd23fddff3038da64736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH15 0xC2E074EC69A0DFB2997BA6C7D2E1E OR SWAP1 SSTORE PUSH32 0x7F2CE995617D2816B426C5C8698C5EC2952F7A34BB10F38326F74933D5893697 PUSH1 0x34 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE8 DUP1 PUSH2 0x65 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7D7D0046 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xCC0E7E56 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xCC0E7E56 EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xF41C4319 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xF776F518 EQ PUSH2 0x1DD JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x7D7D0046 EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x182 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0xF3A85D8 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0xF3 JUMPI DUP1 PUSH4 0x2587A6A2 EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x74624C55 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xFB PUSH2 0x2F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x117 PUSH2 0x301 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH2 0x307 JUMP JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x405 JUMP JUMPDEST PUSH2 0x156 PUSH2 0x509 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x117 PUSH2 0x518 JUMP JUMPDEST PUSH2 0x156 PUSH2 0x529 JUMP JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x538 JUMP JUMPDEST PUSH2 0x117 PUSH2 0x6F2 JUMP JUMPDEST PUSH2 0x117 PUSH2 0x6F8 JUMP JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6FE JUMP JUMPDEST PUSH2 0xFB PUSH2 0x769 JUMP JUMPDEST PUSH2 0x1EE CALLER PUSH2 0x772 JUMP JUMPDEST DUP1 PUSH2 0x1F8 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x23C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x25B JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x2A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2B3 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x789 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x41FF5D5CE3B7935893A4E7269EC5CAAE9CCA5E3BF0EB4B21D2F443489667112E SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x310 CALLER PUSH2 0x772 JUMP JUMPDEST PUSH2 0x35A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x40E CALLER PUSH2 0x772 JUMP JUMPDEST DUP1 PUSH2 0x418 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x45C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x47B JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x4C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4D3 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F2 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF2A77CD04C3CC155588DD3BF67B310AB4FB3B1DA3CF6B8D7D4D2AA1D09B794C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x524 PUSH1 0x36 PUSH2 0x853 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x541 CALLER PUSH2 0x772 JUMP JUMPDEST PUSH2 0x58B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x5E9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB91 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x687 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x39 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x707 CALLER PUSH2 0x888 JUMP JUMPDEST PUSH2 0x758 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2B3 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x91C AND JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x7E1 DUP3 DUP3 PUSH2 0x970 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x84B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x86E SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x993 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x87D JUMPI POP DUP1 SLOAD PUSH2 0x784 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x895 PUSH1 0x34 SLOAD PUSH2 0x9F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x914 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x95E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB6F PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x96C DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x970 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x979 DUP3 PUSH2 0xB15 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x96C JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x9ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA54 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0xB2D SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x993 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0xB6B JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMPDEST POP JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D617463686F776E65722063 PUSH2 0x6E6E PUSH16 0x742062652073657420746F207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A7231582072B36C26711724 SWAP6 PUSH3 0xEBF937 SWAP1 SLT SHL DUP4 PUSH10 0xCA191166DC07C34FD23F 0xDD SELFDESTRUCT ADDRESS CODESIZE 0xDA PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "17106:2510:31:-;;;1311:82:25;;;-1:-1:-1;;;;;;1311:82:25;1350:42;1311:82;;;1162:66:24;1312:58;;17106:2510:31;5:2:-1;;;;30:1;27;20:12;5:2;17106:2510:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637d7d00461161008c578063cc0e7e5611610066578063cc0e7e56146101b0578063e2b4ce97146101b8578063f41c4319146101c0578063f776f518146101dd576100cf565b80637d7d0046146101725780638da5cb5b1461017a578063b242e53414610182576100cf565b80630f3a85d8146100d45780632121dc75146100f35780632587a6a21461010f578063715018a61461012957806374624c55146101315780637d73b2311461014e575b600080fd5b6100f1600480360360208110156100ea57600080fd5b50356101e5565b005b6100fb6102f1565b604080519115158252519081900360200190f35b610117610301565b60408051918252519081900360200190f35b6100f1610307565b6100f16004803603602081101561014757600080fd5b5035610405565b610156610509565b604080516001600160a01b039092168252519081900360200190f35b610117610518565b610156610529565b6100f16004803603604081101561019857600080fd5b506001600160a01b0381351690602001351515610538565b6101176106f2565b6101176106f8565b6100f1600480360360208110156101d657600080fd5b50356106fe565b6100fb610769565b6101ee33610772565b806101f857503330145b61023c576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561025b57506706f05b59d3b200008111155b6102a2576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b6102b360368263ffffffff61078916565b604080513381526020810183905281517f41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e929181900390910190a150565b603554600160a01b900460ff1690565b60365490565b61031033610772565b61035a576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166103b8576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b61040e33610772565b8061041857503330145b61045c576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561047b57506706f05b59d3b200008111155b6104c2576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b6104d360368263ffffffff6107f216565b6040805182815290517faf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c9181900360200190a150565b6033546001600160a01b031690565b60006105246036610853565b905090565b6035546001600160a01b031690565b61054133610772565b61058b576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166105e9576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b03821661062e5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b916023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061068757604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b60395490565b60345490565b61070733610888565b610758576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b6102b360368263ffffffff61091c16565b603a5460ff1690565b6035546001600160a01b038281169116145b919050565b600482015460ff16156107d7576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6107e18282610970565b50600401805460ff19166001179055565b600482015460ff1661084b576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b600281015460009061086e906201518063ffffffff61099316565b42111561087d57508054610784565b506001810154610784565b60006108956034546109f4565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156108ea57600080fd5b505afa1580156108fe573d6000803e3d6000fd5b505050506040513d602081101561091457600080fd5b505192915050565b8082600301541461095e5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b6f6022913960400191505060405180910390fd5b61096c828360030154610970565b5050565b61097982610b15565b808255600182015481101561096c57815460018301555050565b6000828201838110156109ed576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6033546000906001600160a01b0316610a54576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015610aa057600080fd5b505afa158015610ab4573d6000803e3d6000fd5b505050506040513d6020811015610aca57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156108ea57600080fd5b6002810154610b2d906201518063ffffffff61099316565b421115610b6b57426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a15b5056fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a7231582072b36c267117249562ebf93790121b8369ca191166dc07c34fd23fddff3038da64736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7D7D0046 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xCC0E7E56 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xCC0E7E56 EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xF41C4319 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xF776F518 EQ PUSH2 0x1DD JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x7D7D0046 EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x182 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0xF3A85D8 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0xF3 JUMPI DUP1 PUSH4 0x2587A6A2 EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x74624C55 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xFB PUSH2 0x2F1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x117 PUSH2 0x301 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH2 0x307 JUMP JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x405 JUMP JUMPDEST PUSH2 0x156 PUSH2 0x509 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x117 PUSH2 0x518 JUMP JUMPDEST PUSH2 0x156 PUSH2 0x529 JUMP JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x538 JUMP JUMPDEST PUSH2 0x117 PUSH2 0x6F2 JUMP JUMPDEST PUSH2 0x117 PUSH2 0x6F8 JUMP JUMPDEST PUSH2 0xF1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x6FE JUMP JUMPDEST PUSH2 0xFB PUSH2 0x769 JUMP JUMPDEST PUSH2 0x1EE CALLER PUSH2 0x772 JUMP JUMPDEST DUP1 PUSH2 0x1F8 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x23C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x25B JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x2A2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2B3 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x789 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x41FF5D5CE3B7935893A4E7269EC5CAAE9CCA5E3BF0EB4B21D2F443489667112E SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x310 CALLER PUSH2 0x772 JUMP JUMPDEST PUSH2 0x35A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x40E CALLER PUSH2 0x772 JUMP JUMPDEST DUP1 PUSH2 0x418 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x45C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x47B JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x4C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4D3 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7F2 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF2A77CD04C3CC155588DD3BF67B310AB4FB3B1DA3CF6B8D7D4D2AA1D09B794C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x524 PUSH1 0x36 PUSH2 0x853 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x541 CALLER PUSH2 0x772 JUMP JUMPDEST PUSH2 0x58B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x5E9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB91 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x687 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x39 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x707 CALLER PUSH2 0x888 JUMP JUMPDEST PUSH2 0x758 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2B3 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x91C AND JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7D7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x7E1 DUP3 DUP3 PUSH2 0x970 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x84B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x86E SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x993 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x87D JUMPI POP DUP1 SLOAD PUSH2 0x784 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x895 PUSH1 0x34 SLOAD PUSH2 0x9F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x914 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x95E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB6F PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x96C DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x970 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x979 DUP3 PUSH2 0xB15 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x96C JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x9ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA54 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0xB2D SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x993 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0xB6B JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMPDEST POP JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D617463686F776E65722063 PUSH2 0x6E6E PUSH16 0x742062652073657420746F207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A7231582072B36C26711724 SWAP6 PUSH3 0xEBF937 SWAP1 SLT SHL DUP4 PUSH10 0xCA191166DC07C34FD23F 0xDD SELFDESTRUCT ADDRESS CODESIZE 0xDA PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "17106:2510:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17106:2510:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18648:286;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18648:286:31;;:::i;:::-;;2749:94:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;18434:106:31;;;:::i;:::-;;;;;;;;;;;;;;;;3119:306:26;;;:::i;19061:304:31:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19061:304:31;;:::i;1695:89:25:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1695:89:25;;;;;;;;;;;;;;17856:125:31;;;:::i;3508:85:26:-;;;:::i;1823:809::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;18043:110:31:-;;;:::i;1778:95:24:-;;;:::i;17611:189:31:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17611:189:31;;:::i;18214:153::-;;;:::i;18648:286::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;18762:7;17419:8;18734:35;;:74;;;;;17351:10;18773:7;:35;;18734:74;18726:106;;;;;-1:-1:-1;;;18726:106:31;;;;;;;;;;;;-1:-1:-1;;;18726:106:31;;;;;;;;;;;;;;;18842:33;:14;18867:7;18842:33;:24;:33;:::i;:::-;18890:37;;;18907:10;18890:37;;;;;;;;;;;;;;;;;;;;;18648:286;:::o;2749:94:26:-;2821:15;;-1:-1:-1;;;2821:15:26;;;;;2749:94::o;18434:106:31:-;18513:14;:20;18434:106;:::o;3119:306:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;19061:304:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;19184:7;17419:8;19156:35;;:74;;;;;17351:10;19195:7;:35;;19156:74;19148:106;;;;;-1:-1:-1;;;19148:106:31;;;;;;;;;;;;-1:-1:-1;;;19148:106:31;;;;;;;;;;;;;;;19264:42;:14;19298:7;19264:42;:33;:42;:::i;:::-;19321:37;;;;;;;;;;;;;;;;;19061:304;:::o;1695:89:25:-;1765:12;;-1:-1:-1;;;;;1765:12:25;1695:89;:::o;17856:125:31:-;17913:7;17939:35;:14;:33;:35::i;:::-;17932:42;;17856:125;:::o;3508:85:26:-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;1823:809::-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;18043:110:31:-;18124:22;;18043:110;:::o;1778:95:24:-;1851:15;;1778:95;:::o;17611:189:31:-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;17698:43:31;:14;17733:7;17698:43;:34;:43;:::i;18214:153::-;18315:45;;;;18214:153;:::o;4191:107:26:-;4285:6;;-1:-1:-1;;;;;4273:18:26;;;4285:6;;4273:18;4191:107;;;;:::o;13606:401:31:-;13757:35;;;;;;13756:36;13748:66;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;;;;13883:27;13896:4;13902:7;13883:12;:27::i;:::-;-1:-1:-1;13958:35:31;;:42;;-1:-1:-1;;13958:42:31;13996:4;13958:42;;;13606:401::o;14142:317::-;14293:35;;;;;;14285:73;;;;;-1:-1:-1;;;14285:73:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;14430:12;;;;:22;14142:317::o;12691:240::-;12796:19;;;;12767:7;;12796:33;;12820:8;12796:33;:23;:33;:::i;:::-;12790:3;:39;12786:139;;;-1:-1:-1;12852:10:31;;12845:17;;12786:139;-1:-1:-1;12900:14:31;;;;12893:21;;2393:158:24;2457:4;2492:28;2504:15;;2492:11;:28::i;:::-;-1:-1:-1;;;;;2480:54:24;;2535:8;2480:64;;;;;;;;;;;;;-1:-1:-1;;;;;2480:64:24;-1:-1:-1;;;;;2480:64:24;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2480:64:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2480:64:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2480:64:24;;2393:158;-1:-1:-1;;2393:158:24:o;11788:338:31:-;11973:7;11957:4;:12;;;:23;11949:70;;;;-1:-1:-1;;;11949:70:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:32;12100:4;12106;:12;;;12087;:32::i;:::-;11788:338;;:::o;13077:425::-;13211:27;13233:4;13211:21;:27::i;:::-;13303:20;;;13415:14;;;;:27;-1:-1:-1;13411:85:31;;;13475:10;;13458:14;;;:27;13077:425;;:::o;834:176:6:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:6:o;1971:165:25:-;1549:12;;2042:7;;-1:-1:-1;;;;;1549:12:25;1541:68;;;;;-1:-1:-1;;;1541:68:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:12;;2083:33;;;-1:-1:-1;;;2083:33:25;;;;;;;;;;-1:-1:-1;;;;;2087:12:25;;;;2083:26;;:33;;;;;;;;;;;;;;;2087:12;2083:33;;;5:2:-1;;;;30:1;27;20:12;5:2;2083:33:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2083:33:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2083:33:25;2068:61;;;-1:-1:-1;;;2068:61:25;;;;;;;;;;-1:-1:-1;;;;;2068:54:25;;;;;;:61;;;;;2083:33;;2068:61;;;;;;;;:54;:61;;;5:2:-1;;;;30:1;27;20:12;14533:370:31;14617:19;;;;:33;;14641:8;14617:33;:23;:33;:::i;:::-;14611:3;:39;14607:290;;;14733:3;14711:19;;;:25;14834:10;;14817:14;;;:27;14863:23;;;;14834:10;;14863:23;14607:290;14533:370;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "609600", + "executionCost": "41487", + "totalCost": "651087" + }, + "external": { + "confirmGasTopUpLimitUpdate(uint256)": "infinite", + "controllerNode()": "1042", + "ensRegistry()": "1148", + "gasTopUpLimitAvailable()": "infinite", + "gasTopUpLimitControllerConfirmationRequired()": "1098", + "gasTopUpLimitPending()": "1020", + "gasTopUpLimitValue()": "1043", + "isTransferable()": "1050", + "owner()": "1082", + "renounceOwnership()": "24106", + "setGasTopUpLimit(uint256)": "infinite", + "submitGasTopUpLimitUpdate(uint256)": "infinite", + "transferOwnership(address,bool)": "infinite" + }, + "internal": { + "_initializeGasTopUpLimit()": "infinite" + } + }, + "methodIdentifiers": { + "confirmGasTopUpLimitUpdate(uint256)": "f41c4319", + "controllerNode()": "e2b4ce97", + "ensRegistry()": "7d73b231", + "gasTopUpLimitAvailable()": "7d7d0046", + "gasTopUpLimitControllerConfirmationRequired()": "f776f518", + "gasTopUpLimitPending()": "cc0e7e56", + "gasTopUpLimitValue()": "2587a6a2", + "isTransferable()": "2121dc75", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "setGasTopUpLimit(uint256)": "0f3a85d8", + "submitGasTopUpLimitUpdate(uint256)": "74624c55", + "transferOwnership(address,bool)": "b242e534" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetGasTopUpLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedGasTopUpLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setGasTopUpLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/GasTopUpLimit_metadata.json b/contracts/artifacts/GasTopUpLimit_metadata.json new file mode 100644 index 00000000..9c4f5c4b --- /dev/null +++ b/contracts/artifacts/GasTopUpLimit_metadata.json @@ -0,0 +1,589 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetGasTopUpLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedGasTopUpLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setGasTopUpLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "methods": { + "confirmGasTopUpLimitUpdate(uint256)": { + "details": "Confirm pending set top up gas limit operation." + }, + "controllerNode()": { + "return": "the controller node registered in ENS." + }, + "ensRegistry()": { + "return": "Current address of the ENS registry contract." + }, + "gasTopUpLimitAvailable()": { + "details": "View your available gas top-up limit" + }, + "gasTopUpLimitControllerConfirmationRequired()": { + "details": "Has the gas top-up limit been initialised" + }, + "gasTopUpLimitPending()": { + "details": "Is there an active gas top-up limit change" + }, + "gasTopUpLimitValue()": { + "details": "View how much gas top-up has been spent already" + }, + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "owner()": { + "return": "address of the owner." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "setGasTopUpLimit(uint256)": { + "details": "Sets the daily gas top up limit.", + "params": { + "_amount": "is the gas top up amount in wei." + } + }, + "submitGasTopUpLimitUpdate(uint256)": { + "details": "Submit a daily gas top up limit update.", + "params": { + "_amount": "is the daily top up gas limit amount in wei." + } + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "GasTopUpLimit provides daily limit functionality." + }, + "userdoc": { + "methods": { + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "GasTopUpLimit" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/LoadLimit.json b/contracts/artifacts/LoadLimit.json new file mode 100644 index 00000000..6c08f457 --- /dev/null +++ b/contracts/artifacts/LoadLimit.json @@ -0,0 +1,376 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d39660365534801561007957600080fd5b50610be7806100896000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063ab2059931161008c578063c4856cd911610066578063c4856cd9146101d3578063da84b1ed146101db578063e2b4ce97146101e3578063f40b51f8146101eb576100ea565b8063ab20599314610180578063b221f31614610188578063b242e534146101a5576100ea565b8063715018a6116100c8578063715018a6146101445780637d73b2311461014c578063877337b0146101705780638da5cb5b14610178576100ea565b80631efd0299146100ef5780632121dc75146101095780633bfec25414610125575b600080fd5b6100f7610208565b60408051918252519081900360200190f35b610111610219565b604080519115158252519081900360200190f35b6101426004803603602081101561013b57600080fd5b5035610229565b005b610142610321565b61015461041f565b604080516001600160a01b039092168252519081900360200190f35b6100f761042e565b610154610434565b610111610443565b6101426004803603602081101561019e57600080fd5b503561044c565b610142600480360360408110156101bb57600080fd5b506001600160a01b038135169060200135151561053c565b6100f76106f6565b6100f76106fc565b6100f7610702565b6101426004803603602081101561020157600080fd5b5035610708565b60006102146038610773565b905090565b603554600160a01b900460ff1690565b610232336107a9565b8061023c57503330145b610280576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6037548111156102d2576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b6102e360388263ffffffff6107bd16565b604080513381526020810183905281517f0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef929181900390910190a150565b61032a336107a9565b610374576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166103d2576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b60365490565b6035546001600160a01b031690565b603c5460ff1690565b610455336107a9565b8061045f57503330145b6104a3576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6037548111156104f5576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b61050660388263ffffffff61082616565b6040805182815290517fc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d109181900360200190a150565b610545336107a9565b61058f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166105ed576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166106325760405162461bcd60e51b8152600401808060200182810382526023815260200180610b906023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061068b57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603b5490565b60385490565b60345490565b61071133610887565b610762576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b6102e360388263ffffffff61091b16565b600281015460009061078e906201518063ffffffff61096f16565b42111561079d575080546107a4565b5060018101545b919050565b6035546001600160a01b0390811691161490565b600482015460ff161561080b576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b61081582826109d0565b50600401805460ff19166001179055565b600482015460ff1661087f576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b60006108946034546109f3565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b505192915050565b8082600301541461095d5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b6e6022913960400191505060405180910390fd5b61096b8283600301546109d0565b5050565b6000828201838110156109c9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6109d982610b14565b808255600182015481101561096b57815460018301555050565b6033546000906001600160a01b0316610a53576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015610a9f57600080fd5b505afa158015610ab3573d6000803e3d6000fd5b505050506040513d6020811015610ac957600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156108e957600080fd5b6002810154610b2c906201518063ffffffff61096f16565b421115610b6a57426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a15b5056fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a723158202fbea0534af1f3f15c6efc1a4658dcb82f38911ed3887ff708963f03f9c82f3d64736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH15 0xC2E074EC69A0DFB2997BA6C7D2E1E OR SWAP1 SSTORE PUSH32 0x7F2CE995617D2816B426C5C8698C5EC2952F7A34BB10F38326F74933D5893697 PUSH1 0x34 SSTORE PUSH32 0xE84F90570F13FE09F288F2411FF9CF50DA611ED0C7DB7F73D48053FFC974D396 PUSH1 0x36 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE7 DUP1 PUSH2 0x89 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB205993 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC4856CD9 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC4856CD9 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xDA84B1ED EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0xF40B51F8 EQ PUSH2 0x1EB JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0xAB205993 EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0xB221F316 EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x1A5 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x877337B0 EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x178 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x1EFD0299 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x3BFEC254 EQ PUSH2 0x125 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x208 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH2 0x219 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x229 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x142 PUSH2 0x321 JUMP JUMPDEST PUSH2 0x154 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF7 PUSH2 0x42E JUMP JUMPDEST PUSH2 0x154 PUSH2 0x434 JUMP JUMPDEST PUSH2 0x111 PUSH2 0x443 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x44C JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x53C JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x6FC JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x702 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x214 PUSH1 0x38 PUSH2 0x773 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x232 CALLER PUSH2 0x7A9 JUMP JUMPDEST DUP1 PUSH2 0x23C JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x280 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x37 SLOAD DUP2 GT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2E3 PUSH1 0x38 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7BD AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB05243483E17C3F3377AEE82B7D47E5700B48288695FC08B7ECC2759AFA44EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x32A CALLER PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x374 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x455 CALLER PUSH2 0x7A9 JUMP JUMPDEST DUP1 PUSH2 0x45F JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x4A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x37 SLOAD DUP2 GT ISZERO PUSH2 0x4F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x506 PUSH1 0x38 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x826 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC178D379965E5657B6FC57494E392F121A14119215DFB422AAD7DB4CC03F2D10 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x545 CALLER PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x58F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x5ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x632 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB90 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x68B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x38 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x711 CALLER PUSH2 0x887 JUMP JUMPDEST PUSH2 0x762 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2E3 PUSH1 0x38 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x91B AND JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x78E SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x96F AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x79D JUMPI POP DUP1 SLOAD PUSH2 0x7A4 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x80B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x815 DUP3 DUP3 PUSH2 0x9D0 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x87F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x894 PUSH1 0x34 SLOAD PUSH2 0x9F3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x913 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB6E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x96B DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x9D0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x9C9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9D9 DUP3 PUSH2 0xB14 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x96B JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA53 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0xB2C SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x96F AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0xB6A JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMPDEST POP JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D617463686F776E65722063 PUSH2 0x6E6E PUSH16 0x742062652073657420746F207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A723158202FBEA0534AF1F3 CALL 0x5C PUSH15 0xFC1A4658DCB82F38911ED3887FF708 SWAP7 EXTCODEHASH SUB 0xF9 0xC8 0x2F RETURNDATASIZE PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "19681:2552:31:-;;;1311:82:25;;;-1:-1:-1;;;;;;1311:82:25;1350:42;1311:82;;;1162:66:24;1312:58;;1143:66:27;1304:67;;19681:2552:31;5:2:-1;;;;30:1;27;20:12;5:2;19681:2552:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063ab2059931161008c578063c4856cd911610066578063c4856cd9146101d3578063da84b1ed146101db578063e2b4ce97146101e3578063f40b51f8146101eb576100ea565b8063ab20599314610180578063b221f31614610188578063b242e534146101a5576100ea565b8063715018a6116100c8578063715018a6146101445780637d73b2311461014c578063877337b0146101705780638da5cb5b14610178576100ea565b80631efd0299146100ef5780632121dc75146101095780633bfec25414610125575b600080fd5b6100f7610208565b60408051918252519081900360200190f35b610111610219565b604080519115158252519081900360200190f35b6101426004803603602081101561013b57600080fd5b5035610229565b005b610142610321565b61015461041f565b604080516001600160a01b039092168252519081900360200190f35b6100f761042e565b610154610434565b610111610443565b6101426004803603602081101561019e57600080fd5b503561044c565b610142600480360360408110156101bb57600080fd5b506001600160a01b038135169060200135151561053c565b6100f76106f6565b6100f76106fc565b6100f7610702565b6101426004803603602081101561020157600080fd5b5035610708565b60006102146038610773565b905090565b603554600160a01b900460ff1690565b610232336107a9565b8061023c57503330145b610280576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6037548111156102d2576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b6102e360388263ffffffff6107bd16565b604080513381526020810183905281517f0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef929181900390910190a150565b61032a336107a9565b610374576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166103d2576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b60365490565b6035546001600160a01b031690565b603c5460ff1690565b610455336107a9565b8061045f57503330145b6104a3576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6037548111156104f5576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b61050660388263ffffffff61082616565b6040805182815290517fc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d109181900360200190a150565b610545336107a9565b61058f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff166105ed576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166106325760405162461bcd60e51b8152600401808060200182810382526023815260200180610b906023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061068b57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603b5490565b60385490565b60345490565b61071133610887565b610762576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b6102e360388263ffffffff61091b16565b600281015460009061078e906201518063ffffffff61096f16565b42111561079d575080546107a4565b5060018101545b919050565b6035546001600160a01b0390811691161490565b600482015460ff161561080b576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b61081582826109d0565b50600401805460ff19166001179055565b600482015460ff1661087f576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b60006108946034546109f3565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156108e957600080fd5b505afa1580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b505192915050565b8082600301541461095d5760405162461bcd60e51b8152600401808060200182810382526022815260200180610b6e6022913960400191505060405180910390fd5b61096b8283600301546109d0565b5050565b6000828201838110156109c9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6109d982610b14565b808255600182015481101561096b57815460018301555050565b6033546000906001600160a01b0316610a53576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015610a9f57600080fd5b505afa158015610ab3573d6000803e3d6000fd5b505050506040513d6020811015610ac957600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156108e957600080fd5b6002810154610b2c906201518063ffffffff61096f16565b421115610b6a57426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a15b5056fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a723158202fbea0534af1f3f15c6efc1a4658dcb82f38911ed3887ff708963f03f9c82f3d64736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB205993 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC4856CD9 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC4856CD9 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xDA84B1ED EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0xF40B51F8 EQ PUSH2 0x1EB JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0xAB205993 EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0xB221F316 EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x1A5 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x877337B0 EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x178 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x1EFD0299 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x3BFEC254 EQ PUSH2 0x125 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x208 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x111 PUSH2 0x219 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x229 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x142 PUSH2 0x321 JUMP JUMPDEST PUSH2 0x154 PUSH2 0x41F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF7 PUSH2 0x42E JUMP JUMPDEST PUSH2 0x154 PUSH2 0x434 JUMP JUMPDEST PUSH2 0x111 PUSH2 0x443 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x44C JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x53C JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x6FC JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x702 JUMP JUMPDEST PUSH2 0x142 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x201 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x214 PUSH1 0x38 PUSH2 0x773 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x232 CALLER PUSH2 0x7A9 JUMP JUMPDEST DUP1 PUSH2 0x23C JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x280 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x37 SLOAD DUP2 GT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2E3 PUSH1 0x38 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x7BD AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB05243483E17C3F3377AEE82B7D47E5700B48288695FC08B7ECC2759AFA44EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x32A CALLER PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x374 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x455 CALLER PUSH2 0x7A9 JUMP JUMPDEST DUP1 PUSH2 0x45F JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x4A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x37 SLOAD DUP2 GT ISZERO PUSH2 0x4F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x506 PUSH1 0x38 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x826 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC178D379965E5657B6FC57494E392F121A14119215DFB422AAD7DB4CC03F2D10 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x545 CALLER PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x58F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x5ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x632 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB90 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x68B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x38 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x711 CALLER PUSH2 0x887 JUMP JUMPDEST PUSH2 0x762 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2E3 PUSH1 0x38 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x91B AND JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x78E SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x96F AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x79D JUMPI POP DUP1 SLOAD PUSH2 0x7A4 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x80B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x815 DUP3 DUP3 PUSH2 0x9D0 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x87F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x894 PUSH1 0x34 SLOAD PUSH2 0x9F3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x913 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xB6E PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x96B DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x9D0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x9C9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9D9 DUP3 PUSH2 0xB14 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x96B JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA53 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0xB2C SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x96F AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0xB6A JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMPDEST POP JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D617463686F776E65722063 PUSH2 0x6E6E PUSH16 0x742062652073657420746F207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A723158202FBEA0534AF1F3 CALL 0x5C PUSH15 0xFC1A4658DCB82F38911ED3887FF708 SWAP7 EXTCODEHASH SUB 0xF9 0xC8 0x2F RETURNDATASIZE PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "19681:2552:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19681:2552:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21121:117;;;:::i;:::-;;;;;;;;;;;;;;;;2749:94:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;20234:233:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20234:233:31;;:::i;:::-;;3119:306:26;;;:::i;1695:89:25:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1695:89:25;;;;;;;;;;;;;;1496:105:27;;;:::i;3508:85:26:-;;;:::i;21451:145:31:-;;;:::i;20582:251::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20582:251:31;;:::i;1823:809:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;21294:102:31:-;;;:::i;21663:98::-;;;:::i;1778:95:24:-;;;:::i;20894:177:31:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20894:177:31;;:::i;21121:117::-;21174:7;21200:31;:10;:29;:31::i;:::-;21193:38;;21121:117;:::o;2749:94:26:-;2821:15;;-1:-1:-1;;;2821:15:26;;;;;2749:94::o;20234:233:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;20327:17;;20316:7;:28;;20308:65;;;;;-1:-1:-1;;;20308:65:31;;;;;;;;;;;;-1:-1:-1;;;20308:65:31;;;;;;;;;;;;;;;20383:29;:10;20404:7;20383:29;:20;:29;:::i;:::-;20427:33;;;20440:10;20427:33;;;;;;;;;;;;;;;;;;;;;20234:233;:::o;3119:306:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;1695:89:25:-;1765:12;;-1:-1:-1;;;;;1765:12:25;1695:89;:::o;1496:105:27:-;1575:19;;1496:105;:::o;3508:85:26:-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;21451:145:31:-;21548:41;;;;21451:145;:::o;20582:251::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;20684:17;;20673:7;:28;;20665:65;;;;;-1:-1:-1;;;20665:65:31;;;;;;;;;;;;-1:-1:-1;;;20665:65:31;;;;;;;;;;;;;;;20740:38;:10;20770:7;20740:38;:29;:38;:::i;:::-;20793:33;;;;;;;;;;;;;;;;;20582:251;:::o;1823:809:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;21294:102:31:-;21371:18;;21294:102;:::o;21663:98::-;21738:10;:16;21663:98;:::o;1778:95:24:-;1851:15;;1778:95;:::o;20894:177:31:-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;20977:39:31;:10;21008:7;20977:39;:30;:39;:::i;12691:240::-;12796:19;;;;12767:7;;12796:33;;12820:8;12796:33;:23;:33;:::i;:::-;12790:3;:39;12786:139;;;-1:-1:-1;12852:10:31;;12845:17;;12786:139;-1:-1:-1;12900:14:31;;;;12786:139;12691:240;;;:::o;4191:107:26:-;4285:6;;-1:-1:-1;;;;;4285:6:26;;;4273:18;;;;4191:107::o;13606:401:31:-;13757:35;;;;;;13756:36;13748:66;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;;;;13883:27;13896:4;13902:7;13883:12;:27::i;:::-;-1:-1:-1;13958:35:31;;:42;;-1:-1:-1;;13958:42:31;13996:4;13958:42;;;13606:401::o;14142:317::-;14293:35;;;;;;14285:73;;;;;-1:-1:-1;;;14285:73:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;14430:12;;;;:22;14142:317::o;2393:158:24:-;2457:4;2492:28;2504:15;;2492:11;:28::i;:::-;-1:-1:-1;;;;;2480:54:24;;2535:8;2480:64;;;;;;;;;;;;;-1:-1:-1;;;;;2480:64:24;-1:-1:-1;;;;;2480:64:24;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2480:64:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2480:64:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2480:64:24;;2393:158;-1:-1:-1;;2393:158:24:o;11788:338:31:-;11973:7;11957:4;:12;;;:23;11949:70;;;;-1:-1:-1;;;11949:70:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:32;12100:4;12106;:12;;;12087;:32::i;:::-;11788:338;;:::o;834:176:6:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:6:o;13077:425:31:-;13211:27;13233:4;13211:21;:27::i;:::-;13303:20;;;13415:14;;;;:27;-1:-1:-1;13411:85:31;;;13475:10;;13458:14;;;:27;13077:425;;:::o;1971:165:25:-;1549:12;;2042:7;;-1:-1:-1;;;;;1549:12:25;1541:68;;;;;-1:-1:-1;;;1541:68:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:12;;2083:33;;;-1:-1:-1;;;2083:33:25;;;;;;;;;;-1:-1:-1;;;;;2087:12:25;;;;2083:26;;:33;;;;;;;;;;;;;;;2087:12;2083:33;;;5:2:-1;;;;30:1;27;20:12;5:2;2083:33:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2083:33:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2083:33:25;2068:61;;;-1:-1:-1;;;2068:61:25;;;;;;;;;;-1:-1:-1;;;;;2068:54:25;;;;;;:61;;;;;2083:33;;2068:61;;;;;;;;:54;:61;;;5:2:-1;;;;30:1;27;20:12;14533:370:31;14617:19;;;;:33;;14641:8;14617:33;:23;:33;:::i;:::-;14611:3;:39;14607:290;;;14733:3;14711:19;;;:25;14834:10;;14817:14;;;:27;14863:23;;;;14834:10;;14863:23;14607:290;14533:370;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "609400", + "executionCost": "61493", + "totalCost": "670893" + }, + "external": { + "confirmLoadLimitUpdate(uint256)": "infinite", + "controllerNode()": "1064", + "ensRegistry()": "1082", + "isTransferable()": "1073", + "loadLimitAvailable()": "infinite", + "loadLimitControllerConfirmationRequired()": "1033", + "loadLimitPending()": "1020", + "loadLimitValue()": "1042", + "owner()": "1126", + "renounceOwnership()": "24056", + "setLoadLimit(uint256)": "infinite", + "submitLoadLimitUpdate(uint256)": "infinite", + "tokenWhitelistNode()": "1065", + "transferOwnership(address,bool)": "infinite" + }, + "internal": { + "_initializeLoadLimit(bytes32)": "infinite" + } + }, + "methodIdentifiers": { + "confirmLoadLimitUpdate(uint256)": "f40b51f8", + "controllerNode()": "e2b4ce97", + "ensRegistry()": "7d73b231", + "isTransferable()": "2121dc75", + "loadLimitAvailable()": "1efd0299", + "loadLimitControllerConfirmationRequired()": "ab205993", + "loadLimitPending()": "c4856cd9", + "loadLimitValue()": "da84b1ed", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "setLoadLimit(uint256)": "3bfec254", + "submitLoadLimitUpdate(uint256)": "b221f316", + "tokenWhitelistNode()": "877337b0", + "transferOwnership(address,bool)": "b242e534" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetLoadLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedLoadLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setLoadLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "tokenWhitelistNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/LoadLimit_metadata.json b/contracts/artifacts/LoadLimit_metadata.json new file mode 100644 index 00000000..cb2fd3d1 --- /dev/null +++ b/contracts/artifacts/LoadLimit_metadata.json @@ -0,0 +1,610 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetLoadLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedLoadLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setLoadLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "tokenWhitelistNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "methods": { + "confirmLoadLimitUpdate(uint256)": { + "details": "Confirm pending set load limit operation." + }, + "controllerNode()": { + "return": "the controller node registered in ENS." + }, + "ensRegistry()": { + "return": "Current address of the ENS registry contract." + }, + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "loadLimitAvailable()": { + "details": "View your available load limit" + }, + "loadLimitControllerConfirmationRequired()": { + "details": "Has the load limit been initialised" + }, + "loadLimitPending()": { + "details": "Is there an active load limit change" + }, + "loadLimitValue()": { + "details": "View how much laod limit has been spent already" + }, + "owner()": { + "return": "address of the owner." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "setLoadLimit(uint256)": { + "details": "Sets a daily card load limit.", + "params": { + "_amount": "is the card load amount in current stablecoin base units." + } + }, + "submitLoadLimitUpdate(uint256)": { + "details": "Submit a daily load limit update.", + "params": { + "_amount": "is the daily load limit amount in wei." + } + }, + "tokenWhitelistNode()": { + "return": "TokenWhitelist's node registered in ENS." + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "LoadLimit provides daily load limit functionality." + }, + "userdoc": { + "methods": { + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "tokenWhitelistNode()": { + "notice": "This shows what TokenWhitelist is being used" + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "LoadLimit" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/SelfCallableOwnable.json b/contracts/artifacts/SelfCallableOwnable.json new file mode 100644 index 00000000..8a82c798 --- /dev/null +++ b/contracts/artifacts/SelfCallableOwnable.json @@ -0,0 +1,158 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5061040c806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80632121dc7514610051578063715018a61461006d5780638da5cb5b14610077578063b242e5341461009b575b600080fd5b6100596100c9565b604080519115158252519081900360200190f35b6100756100d9565b005b61007f6101d7565b604080516001600160a01b039092168252519081900360200190f35b610075600480360360408110156100b157600080fd5b506001600160a01b03813516906020013515156101e6565b603354600160a01b900460ff1690565b6100e2336103a0565b61012c576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603354600160a01b900460ff1661018a576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603380546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b6101ef336103a0565b610239576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603354600160a01b900460ff16610297576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166102dc5760405162461bcd60e51b81526004018080602001828103825260238152602001806103b56023913960400191505060405180910390fd5b6033805460ff60a01b1916600160a01b831515021790558061033557604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603354604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603380546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b039081169116149056fe6f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a723158204c8e09772e1397ff3f14e783d4374305957cf8b29b5a64c80f241d2a9e4118c964736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40C DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x9B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x75 PUSH2 0xD9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x1D7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x1E6 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xE2 CALLER PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x12C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x18A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1EF CALLER PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x239 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x297 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3B5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x335 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP INVALID PUSH16 0x776E65722063616E6E6F742062652073 PUSH6 0x7420746F207A PUSH6 0x726F20616464 PUSH19 0x657373A265627A7A723158204C8E09772E1397 SELFDESTRUCT EXTCODEHASH EQ 0xE7 DUP4 0xD4 CALLDATACOPY NUMBER SDIV SWAP6 PUSH29 0xF8B29B5A64C80F241D2A9E4118C964736F6C6343000511003200000000 ", + "sourceMap": "1941:237:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1941:237:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80632121dc7514610051578063715018a61461006d5780638da5cb5b14610077578063b242e5341461009b575b600080fd5b6100596100c9565b604080519115158252519081900360200190f35b6100756100d9565b005b61007f6101d7565b604080516001600160a01b039092168252519081900360200190f35b610075600480360360408110156100b157600080fd5b506001600160a01b03813516906020013515156101e6565b603354600160a01b900460ff1690565b6100e2336103a0565b61012c576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603354600160a01b900460ff1661018a576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603380546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b6101ef336103a0565b610239576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603354600160a01b900460ff16610297576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166102dc5760405162461bcd60e51b81526004018080602001828103825260238152602001806103b56023913960400191505060405180910390fd5b6033805460ff60a01b1916600160a01b831515021790558061033557604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603354604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603380546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b039081169116149056fe6f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a723158204c8e09772e1397ff3f14e783d4374305957cf8b29b5a64c80f241d2a9e4118c964736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x6D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x9B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x75 PUSH2 0xD9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x1D7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x1E6 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xE2 CALLER PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x12C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x18A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1EF CALLER PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x239 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x297 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x3B5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x335 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP INVALID PUSH16 0x776E65722063616E6E6F742062652073 PUSH6 0x7420746F207A PUSH6 0x726F20616464 PUSH19 0x657373A265627A7A723158204C8E09772E1397 SELFDESTRUCT EXTCODEHASH EQ 0xE7 DUP4 0xD4 CALLDATACOPY NUMBER SDIV SWAP6 PUSH29 0xF8B29B5A64C80F241D2A9E4118C964736F6C6343000511003200000000 ", + "sourceMap": "1941:237:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1941:237:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2749:94:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;3119:306;;;:::i;:::-;;3508:85;;;:::i;:::-;;;;-1:-1:-1;;;;;3508:85:26;;;;;;;;;;;;;;1823:809;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;2749:94::-;2821:15;;-1:-1:-1;;;2821:15:26;;;;;2749:94::o;3119:306::-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;3508:85::-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;1823:809::-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;4191:107::-;4285:6;;-1:-1:-1;;;;;4285:6:26;;;4273:18;;;;4191:107::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "207200", + "executionCost": "251", + "totalCost": "207451" + }, + "external": { + "isTransferable()": "1005", + "owner()": "1059", + "renounceOwnership()": "24033", + "transferOwnership(address,bool)": "infinite" + } + }, + "methodIdentifiers": { + "isTransferable()": "2121dc75", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "transferOwnership(address,bool)": "b242e534" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/SelfCallableOwnable_metadata.json b/contracts/artifacts/SelfCallableOwnable_metadata.json new file mode 100644 index 00000000..0b02081e --- /dev/null +++ b/contracts/artifacts/SelfCallableOwnable_metadata.json @@ -0,0 +1,377 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "providing an additional modifier to check if Owner or self is callingthe \"self\" here is used for the meta transactions", + "methods": { + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "owner()": { + "return": "address of the owner." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "SelfCallableOwnable allows either owner or the contract itself to call its functions" + }, + "userdoc": { + "methods": { + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "SelfCallableOwnable" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/SpendLimit.json b/contracts/artifacts/SpendLimit.json new file mode 100644 index 00000000..b390ba51 --- /dev/null +++ b/contracts/artifacts/SpendLimit.json @@ -0,0 +1,359 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d589369760345534801561005557600080fd5b50610b1c806100656000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637d73b2311161008c578063b242e53411610066578063b242e5341461018a578063bcb8b74a146101b8578063e2b4ce97146101c0578063eadd3cea146101c8576100cf565b80637d73b231146101565780638da5cb5b1461017a5780639b0dfd2714610182576100cf565b8063027ef3eb146100d45780632121dc75146100ee57806321ce918d1461010a5780633c672eb7146101295780635d2362a814610146578063715018a61461014e575b600080fd5b6100dc6101e5565b60408051918252519081900360200190f35b6100f66101eb565b604080519115158252519081900360200190f35b6101276004803603602081101561012057600080fd5b50356101fb565b005b6101276004803603602081101561013f57600080fd5b5035610299565b6100dc61033f565b610127610350565b61015e61044e565b604080516001600160a01b039092168252519081900360200190f35b61015e61045d565b6100dc61046c565b610127600480360360408110156101a057600080fd5b506001600160a01b0381351690602001351515610472565b6100f661062c565b6100dc610635565b610127600480360360208110156101de57600080fd5b503561063b565b60395490565b603554600160a01b900460ff1690565b610204336106a6565b8061020e57503330145b610252576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61026360368263ffffffff6106bd16565b6040805182815290517f4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da919181900360200190a150565b6102a2336106a6565b806102ac57503330145b6102f0576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61030160368263ffffffff61071e16565b604080513381526020810183905281517f068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21929181900390910190a150565b600061034b6036610787565b905090565b610359336106a6565b6103a3576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16610401576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b6035546001600160a01b031690565b60365490565b61047b336106a6565b6104c5576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16610523576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166105685760405162461bcd60e51b8152600401808060200182810382526023815260200180610ac56023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b83151502179055806105c157604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603a5460ff1690565b60345490565b610644336107bc565b610695576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b61030160368263ffffffff61085016565b6035546001600160a01b038281169116145b919050565b600482015460ff16610716576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b600482015460ff161561076c576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b61077682826108a4565b50600401805460ff19166001179055565b60028101546000906107a2906201518063ffffffff6108c716565b4211156107b1575080546106b8565b5060018101546106b8565b60006107c9603454610928565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561081e57600080fd5b505afa158015610832573d6000803e3d6000fd5b505050506040513d602081101561084857600080fd5b505192915050565b808260030154146108925760405162461bcd60e51b8152600401808060200182810382526022815260200180610aa36022913960400191505060405180910390fd5b6108a08283600301546108a4565b5050565b6108ad82610a49565b80825560018201548110156108a057815460018301555050565b600082820183811015610921576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6033546000906001600160a01b0316610988576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561081e57600080fd5b6002810154610a61906201518063ffffffff6108c716565b421115610a9f57426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a15b5056fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a7231582029f0b0eca1ccb82008b2fc6ef732a75b7fa928a2754a4f390b46c0c48063075f64736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH15 0xC2E074EC69A0DFB2997BA6C7D2E1E OR SWAP1 SSTORE PUSH32 0x7F2CE995617D2816B426C5C8698C5EC2952F7A34BB10F38326F74933D5893697 PUSH1 0x34 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB1C DUP1 PUSH2 0x65 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7D73B231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xB242E534 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xBCB8B74A EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xEADD3CEA EQ PUSH2 0x1C8 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x9B0DFD27 EQ PUSH2 0x182 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x27EF3EB EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0x21CE918D EQ PUSH2 0x10A JUMPI DUP1 PUSH4 0x3C672EB7 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x5D2362A8 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x1E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF6 PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1FB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x299 JUMP JUMPDEST PUSH2 0xDC PUSH2 0x33F JUMP JUMPDEST PUSH2 0x127 PUSH2 0x350 JUMP JUMPDEST PUSH2 0x15E PUSH2 0x44E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15E PUSH2 0x45D JUMP JUMPDEST PUSH2 0xDC PUSH2 0x46C JUMP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x472 JUMP JUMPDEST PUSH2 0xF6 PUSH2 0x62C JUMP JUMPDEST PUSH2 0xDC PUSH2 0x635 JUMP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x63B JUMP JUMPDEST PUSH1 0x39 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x204 CALLER PUSH2 0x6A6 JUMP JUMPDEST DUP1 PUSH2 0x20E JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x252 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x263 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6BD AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x4B1B970C8A0FA761E7803ED70C13D7ACA71904B13DF60FBE03F981DA1730DA91 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x2A2 CALLER PUSH2 0x6A6 JUMP JUMPDEST DUP1 PUSH2 0x2AC JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x2F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x301 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x71E AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x68F112E5EC923D412BE64779FE69E0FCBB6784C6617E94CCCC8FD348F2E0F21 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B PUSH1 0x36 PUSH2 0x787 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x359 CALLER PUSH2 0x6A6 JUMP JUMPDEST PUSH2 0x3A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x401 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x47B CALLER PUSH2 0x6A6 JUMP JUMPDEST PUSH2 0x4C5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x523 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAC5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x5C1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x644 CALLER PUSH2 0x7BC JUMP JUMPDEST PUSH2 0x695 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x301 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x850 AND JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x716 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x76C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x776 DUP3 DUP3 PUSH2 0x8A4 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7A2 SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x8C7 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x7B1 JUMPI POP DUP1 SLOAD PUSH2 0x6B8 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x6B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7C9 PUSH1 0x34 SLOAD PUSH2 0x928 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x832 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x892 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAA3 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8A0 DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x8A4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x8AD DUP3 PUSH2 0xA49 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x8A0 JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x921 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x988 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0xA61 SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x8C7 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0xA9F JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMPDEST POP JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D617463686F776E65722063 PUSH2 0x6E6E PUSH16 0x742062652073657420746F207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A7231582029F0B0ECA1CCB8 KECCAK256 ADDMOD 0xB2 0xFC PUSH15 0xF732A75B7FA928A2754A4F390B46C0 0xC4 DUP1 PUSH4 0x75F6473 PUSH16 0x6C634300051100320000000000000000 ", + "sourceMap": "14965:2077:31:-;;;1311:82:25;;;-1:-1:-1;;;;;;1311:82:25;1350:42;1311:82;;;1162:66:24;1312:58;;14965:2077:31;5:2:-1;;;;30:1;27;20:12;5:2;14965:2077:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637d73b2311161008c578063b242e53411610066578063b242e5341461018a578063bcb8b74a146101b8578063e2b4ce97146101c0578063eadd3cea146101c8576100cf565b80637d73b231146101565780638da5cb5b1461017a5780639b0dfd2714610182576100cf565b8063027ef3eb146100d45780632121dc75146100ee57806321ce918d1461010a5780633c672eb7146101295780635d2362a814610146578063715018a61461014e575b600080fd5b6100dc6101e5565b60408051918252519081900360200190f35b6100f66101eb565b604080519115158252519081900360200190f35b6101276004803603602081101561012057600080fd5b50356101fb565b005b6101276004803603602081101561013f57600080fd5b5035610299565b6100dc61033f565b610127610350565b61015e61044e565b604080516001600160a01b039092168252519081900360200190f35b61015e61045d565b6100dc61046c565b610127600480360360408110156101a057600080fd5b506001600160a01b0381351690602001351515610472565b6100f661062c565b6100dc610635565b610127600480360360208110156101de57600080fd5b503561063b565b60395490565b603554600160a01b900460ff1690565b610204336106a6565b8061020e57503330145b610252576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61026360368263ffffffff6106bd16565b6040805182815290517f4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da919181900360200190a150565b6102a2336106a6565b806102ac57503330145b6102f0576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61030160368263ffffffff61071e16565b604080513381526020810183905281517f068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21929181900390910190a150565b600061034b6036610787565b905090565b610359336106a6565b6103a3576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16610401576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b6035546001600160a01b031690565b60365490565b61047b336106a6565b6104c5576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16610523576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166105685760405162461bcd60e51b8152600401808060200182810382526023815260200180610ac56023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b83151502179055806105c157604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603a5460ff1690565b60345490565b610644336107bc565b610695576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b61030160368263ffffffff61085016565b6035546001600160a01b038281169116145b919050565b600482015460ff16610716576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b600482015460ff161561076c576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b61077682826108a4565b50600401805460ff19166001179055565b60028101546000906107a2906201518063ffffffff6108c716565b4211156107b1575080546106b8565b5060018101546106b8565b60006107c9603454610928565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561081e57600080fd5b505afa158015610832573d6000803e3d6000fd5b505050506040513d602081101561084857600080fd5b505192915050565b808260030154146108925760405162461bcd60e51b8152600401808060200182810382526022815260200180610aa36022913960400191505060405180910390fd5b6108a08283600301546108a4565b5050565b6108ad82610a49565b80825560018201548110156108a057815460018301555050565b600082820183811015610921576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6033546000906001600160a01b0316610988576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561081e57600080fd5b6002810154610a61906201518063ffffffff6108c716565b421115610a9f57426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a15b5056fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f2061646472657373a265627a7a7231582029f0b0eca1ccb82008b2fc6ef732a75b7fa928a2754a4f390b46c0c48063075f64736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7D73B231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xB242E534 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xBCB8B74A EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xEADD3CEA EQ PUSH2 0x1C8 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x7D73B231 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0x9B0DFD27 EQ PUSH2 0x182 JUMPI PUSH2 0xCF JUMP JUMPDEST DUP1 PUSH4 0x27EF3EB EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0x21CE918D EQ PUSH2 0x10A JUMPI DUP1 PUSH4 0x3C672EB7 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x5D2362A8 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x1E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF6 PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1FB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x299 JUMP JUMPDEST PUSH2 0xDC PUSH2 0x33F JUMP JUMPDEST PUSH2 0x127 PUSH2 0x350 JUMP JUMPDEST PUSH2 0x15E PUSH2 0x44E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15E PUSH2 0x45D JUMP JUMPDEST PUSH2 0xDC PUSH2 0x46C JUMP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x472 JUMP JUMPDEST PUSH2 0xF6 PUSH2 0x62C JUMP JUMPDEST PUSH2 0xDC PUSH2 0x635 JUMP JUMPDEST PUSH2 0x127 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x63B JUMP JUMPDEST PUSH1 0x39 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x204 CALLER PUSH2 0x6A6 JUMP JUMPDEST DUP1 PUSH2 0x20E JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x252 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x263 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x6BD AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x4B1B970C8A0FA761E7803ED70C13D7ACA71904B13DF60FBE03F981DA1730DA91 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x2A2 CALLER PUSH2 0x6A6 JUMP JUMPDEST DUP1 PUSH2 0x2AC JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x2F0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x301 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x71E AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x68F112E5EC923D412BE64779FE69E0FCBB6784C6617E94CCCC8FD348F2E0F21 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B PUSH1 0x36 PUSH2 0x787 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x359 CALLER PUSH2 0x6A6 JUMP JUMPDEST PUSH2 0x3A3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x401 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x47B CALLER PUSH2 0x6A6 JUMP JUMPDEST PUSH2 0x4C5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x523 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAC5 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x5C1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x644 CALLER PUSH2 0x7BC JUMP JUMPDEST PUSH2 0x695 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E646572206973206E6F74206120636F6E74726F6C6C6572000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x301 PUSH1 0x36 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x850 AND JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x716 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x76C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x776 DUP3 DUP3 PUSH2 0x8A4 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7A2 SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x8C7 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x7B1 JUMPI POP DUP1 SLOAD PUSH2 0x6B8 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x6B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7C9 PUSH1 0x34 SLOAD PUSH2 0x928 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x832 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x892 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0xAA3 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8A0 DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x8A4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x8AD DUP3 PUSH2 0xA49 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x8A0 JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x921 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x988 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x81E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0xA61 SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x8C7 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0xA9F JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMPDEST POP JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D617463686F776E65722063 PUSH2 0x6E6E PUSH16 0x742062652073657420746F207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A7231582029F0B0ECA1CCB8 KECCAK256 ADDMOD 0xB2 0xFC PUSH15 0xF732A75B7FA928A2754A4F390B46C0 0xC4 DUP1 PUSH4 0x75F6473 PUSH16 0x6C634300051100320000000000000000 ", + "sourceMap": "14965:2077:31:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14965:2077:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16037:104;;;:::i;:::-;;;;;;;;;;;;;;;;2749:94:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;16644:179:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16644:179:31;;:::i;:::-;;15655:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15655:161:31;;:::i;15861:119::-;;;:::i;3119:306:26:-;;;:::i;1695:89:25:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1695:89:25;;;;;;;;;;;;;;3508:85:26;;;:::i;16400:100:31:-;;;:::i;1823:809:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;16197:147:31:-;;;:::i;1778:95:24:-;;;:::i;15318:180:31:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15318:180:31;;:::i;16037:104::-;16115:19;;16037:104;:::o;2749:94:26:-;2821:15;;-1:-1:-1;;;2821:15:26;;;;;2749:94::o;16644:179:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;16728:39;:11;16759:7;16728:39;:30;:39;:::i;:::-;16782:34;;;;;;;;;;;;;;;;;16644:179;:::o;15655:161::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;15730:30;:11;15752:7;15730:30;:21;:30;:::i;:::-;15775:34;;;15789:10;15775:34;;;;;;;;;;;;;;;;;;;;;15655:161;:::o;15861:119::-;15915:7;15941:32;:11;:30;:32::i;:::-;15934:39;;15861:119;:::o;3119:306:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;1695:89:25:-;1765:12;;-1:-1:-1;;;;;1765:12:25;1695:89;:::o;3508:85:26:-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;16400:100:31:-;16476:11;:17;16400:100;:::o;1823:809:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;16197:147:31:-;16295:42;;;;16197:147;:::o;1778:95:24:-;1851:15;;1778:95;:::o;15318:180:31:-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;15402:40:31;:11;15434:7;15402:40;:31;:40;:::i;4191:107:26:-;4285:6;;-1:-1:-1;;;;;4273:18:26;;;4285:6;;4273:18;4191:107;;;;:::o;14142:317:31:-;14293:35;;;;;;14285:73;;;;;-1:-1:-1;;;14285:73:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;14430:12;;;;:22;14142:317::o;13606:401::-;13757:35;;;;;;13756:36;13748:66;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;;;;13883:27;13896:4;13902:7;13883:12;:27::i;:::-;-1:-1:-1;13958:35:31;;:42;;-1:-1:-1;;13958:42:31;13996:4;13958:42;;;13606:401::o;12691:240::-;12796:19;;;;12767:7;;12796:33;;12820:8;12796:33;:23;:33;:::i;:::-;12790:3;:39;12786:139;;;-1:-1:-1;12852:10:31;;12845:17;;12786:139;-1:-1:-1;12900:14:31;;;;12893:21;;2393:158:24;2457:4;2492:28;2504:15;;2492:11;:28::i;:::-;-1:-1:-1;;;;;2480:54:24;;2535:8;2480:64;;;;;;;;;;;;;-1:-1:-1;;;;;2480:64:24;-1:-1:-1;;;;;2480:64:24;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2480:64:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2480:64:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2480:64:24;;2393:158;-1:-1:-1;;2393:158:24:o;11788:338:31:-;11973:7;11957:4;:12;;;:23;11949:70;;;;-1:-1:-1;;;11949:70:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:32;12100:4;12106;:12;;;12087;:32::i;:::-;11788:338;;:::o;13077:425::-;13211:27;13233:4;13211:21;:27::i;:::-;13303:20;;;13415:14;;;;:27;-1:-1:-1;13411:85:31;;;13475:10;;13458:14;;;:27;13077:425;;:::o;834:176:6:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:6:o;1971:165:25:-;1549:12;;2042:7;;-1:-1:-1;;;;;1549:12:25;1541:68;;;;;-1:-1:-1;;;1541:68:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:12;;2083:33;;;-1:-1:-1;;;2083:33:25;;;;;;;;;;-1:-1:-1;;;;;2087:12:25;;;;2083:26;;:33;;;;;;;;;;;;;;;2087:12;2083:33;;;5:2:-1;;;;30:1;27;20:12;5:2;2083:33:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2083:33:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2083:33:25;2068:61;;;-1:-1:-1;;;2068:61:25;;;;;;;;;;-1:-1:-1;;;;;2068:54:25;;;;;;:61;;;;;2083:33;;2068:61;;;;;;;;:54;:61;;;5:2:-1;;;;30:1;27;20:12;14533:370:31;14617:19;;;;:33;;14641:8;14617:33;:23;:33;:::i;:::-;14611:3;:39;14607:290;;;14733:3;14711:19;;;:25;14834:10;;14817:14;;;:27;14863:23;;;;14834:10;;14863:23;14607:290;14533:370;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "568800", + "executionCost": "41442", + "totalCost": "610242" + }, + "external": { + "confirmSpendLimitUpdate(uint256)": "infinite", + "controllerNode()": "1064", + "ensRegistry()": "1060", + "isTransferable()": "1050", + "owner()": "1082", + "renounceOwnership()": "24150", + "setSpendLimit(uint256)": "infinite", + "spendLimitAvailable()": "infinite", + "spendLimitControllerConfirmationRequired()": "1054", + "spendLimitPending()": "999", + "spendLimitValue()": "1065", + "submitSpendLimitUpdate(uint256)": "infinite", + "transferOwnership(address,bool)": "infinite" + }, + "internal": { + "_initializeSpendLimit(uint256)": "infinite" + } + }, + "methodIdentifiers": { + "confirmSpendLimitUpdate(uint256)": "eadd3cea", + "controllerNode()": "e2b4ce97", + "ensRegistry()": "7d73b231", + "isTransferable()": "2121dc75", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "setSpendLimit(uint256)": "3c672eb7", + "spendLimitAvailable()": "5d2362a8", + "spendLimitControllerConfirmationRequired()": "bcb8b74a", + "spendLimitPending()": "027ef3eb", + "spendLimitValue()": "9b0dfd27", + "submitSpendLimitUpdate(uint256)": "21ce918d", + "transferOwnership(address,bool)": "b242e534" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetSpendLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedSpendLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setSpendLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/SpendLimit_metadata.json b/contracts/artifacts/SpendLimit_metadata.json new file mode 100644 index 00000000..cce5ccf0 --- /dev/null +++ b/contracts/artifacts/SpendLimit_metadata.json @@ -0,0 +1,589 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetSpendLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedSpendLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setSpendLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "methods": { + "confirmSpendLimitUpdate(uint256)": { + "details": "Confirm pending set daily limit operation." + }, + "controllerNode()": { + "return": "the controller node registered in ENS." + }, + "ensRegistry()": { + "return": "Current address of the ENS registry contract." + }, + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "owner()": { + "return": "address of the owner." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "setSpendLimit(uint256)": { + "details": "Sets the initial daily spend (aka transfer) limit for non-whitelisted addresses.", + "params": { + "_amount": "is the daily limit amount in wei." + } + }, + "spendLimitAvailable()": { + "details": "View your available limit" + }, + "spendLimitControllerConfirmationRequired()": { + "details": "Has the spend limit been initialised" + }, + "spendLimitPending()": { + "details": "Is there an active spend limit change" + }, + "spendLimitValue()": { + "details": "View how much has been spent already" + }, + "submitSpendLimitUpdate(uint256)": { + "details": "Submit a daily transfer limit update for non-whitelisted addresses.", + "params": { + "_amount": "is the daily limit amount in wei." + } + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "it provides daily spend limit functionality." + }, + "userdoc": { + "methods": { + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "SpendLimit" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/artifacts/Wallet.json b/contracts/artifacts/Wallet.json new file mode 100644 index 00000000..72db8112 --- /dev/null +++ b/contracts/artifacts/Wallet.json @@ -0,0 +1,1660 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d39660455534801561007957600080fd5b50615de6806200008a6000396000f3fe6080604052600436106103a25760003560e01c80637fd004fa116101e7578063cc0e7e561161010d578063e61c51ca116100a0578063f41c43191161006f578063f41c431914611114578063f42176481461113e578063f776f518146111b9578063f8b2cb4f146111ce576103a2565b8063e61c51ca1461105d578063eadd3cea14611087578063f36febda146110b1578063f40b51f8146110ea576103a2565b8063d251fefc116100dc578063d251fefc14610ff4578063da84b1ed1461101e578063de212bf314611033578063e2b4ce9714611048576103a2565b8063cc0e7e5614610ef2578063cccdc55614610f07578063cd7958dd14610f1c578063ce0b5bd514610fca576103a2565b8063b221f31611610185578063be40ba7911610154578063be40ba7914610e5b578063beabacc814610e70578063c4856cd914610eb3578063cbd2ac6814610ec8576103a2565b8063b221f31614610da8578063b242e53414610dd2578063b87e21ef14610e0d578063bcb8b74a14610e46576103a2565b806390e690c7116101c157806390e690c714610cb85780639b0dfd2714610ccd578063aaf1fc6214610ce2578063ab20599314610d93576103a2565b80637fd004fa14610c13578063877337b014610c8e5780638da5cb5b14610ca3576103a2565b80633a43199f116102cc5780635d2362a81161026a57806374624c551161023957806374624c5514610b8e578063747c31d614610bb85780637d73b23114610bcd5780637d7d004614610bfe576103a2565b80635d2362a814610a8e5780636137d67014610aa357806369efdfc014610b1e578063715018a614610b79576103a2565b80633f579f42116102a65780633f579f42146108b757806346efe0ed1461097d57806347b55a9d14610a4f5780635adc02ab14610a64576103a2565b80633a43199f146108375780633bfec254146108635780633c672eb71461088d576103a2565b80631efd0299116103445780632587a6a2116103135780632587a6a21461077557806326d05ab21461078a578063294f40251461079f57806332531c3c14610804576103a2565b80631efd02991461065657806320c13b0b1461066b5780632121dc751461073657806321ce918d1461074b576103a2565b8063100f23fd11610380578063100f23fd146104425780631127b57e1461046c5780631626ba7e146104f65780631aa21fba146105cb576103a2565b806301ffc9a7146103a7578063027ef3eb146103ef5780630f3a85d814610416575b600080fd5b3480156103b357600080fd5b506103db600480360360208110156103ca57600080fd5b50356001600160e01b031916611201565b604080519115158252519081900360200190f35b3480156103fb57600080fd5b5061040461121b565b60408051918252519081900360200190f35b34801561042257600080fd5b506104406004803603602081101561043957600080fd5b5035611222565b005b34801561044e57600080fd5b506104406004803603602081101561046557600080fd5b503561132e565b34801561047857600080fd5b506104816114d3565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104bb5781810151838201526020016104a3565b50505050905090810190601f1680156104e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050257600080fd5b506105ae6004803603604081101561051957600080fd5b81359190810190604081016020820135600160201b81111561053a57600080fd5b82018360208201111561054c57600080fd5b803590602001918460018302840111600160201b8311171561056d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114f4945050505050565b604080516001600160e01b03199092168252519081900360200190f35b3480156105d757600080fd5b50610440600480360360408110156105ee57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561061857600080fd5b82018360208201111561062a57600080fd5b803590602001918460208302840111600160201b8311171561064b57600080fd5b509092509050611569565b34801561066257600080fd5b506104046116ee565b34801561067757600080fd5b506105ae6004803603604081101561068e57600080fd5b810190602081018135600160201b8111156106a857600080fd5b8201836020820111156106ba57600080fd5b803590602001918460018302840111600160201b831117156106db57600080fd5b919390929091602081019035600160201b8111156106f857600080fd5b82018360208201111561070a57600080fd5b803590602001918460018302840111600160201b8311171561072b57600080fd5b5090925090506116ff565b34801561074257600080fd5b506103db6117d4565b34801561075757600080fd5b506104406004803603602081101561076e57600080fd5b50356117e4565b34801561078157600080fd5b50610404611882565b34801561079657600080fd5b506103db611888565b3480156107ab57600080fd5b506107b4611891565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107f05781810151838201526020016107d8565b505050509050019250505060405180910390f35b34801561081057600080fd5b506103db6004803603602081101561082757600080fd5b50356001600160a01b03166118f3565b6104406004803603604081101561084d57600080fd5b506001600160a01b038135169060200135611908565b34801561086f57600080fd5b506104406004803603602081101561088657600080fd5b5035611b46565b34801561089957600080fd5b50610440600480360360208110156108b057600080fd5b5035611c3e565b3480156108c357600080fd5b50610481600480360360608110156108da57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460018302840111600160201b8311171561093c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ce4945050505050565b34801561098957600080fd5b50610440600480360360608110156109a057600080fd5b81359190810190604081016020820135600160201b8111156109c157600080fd5b8201836020820111156109d357600080fd5b803590602001918460018302840111600160201b831117156109f457600080fd5b919390929091602081019035600160201b811115610a1157600080fd5b820183602082011115610a2357600080fd5b803590602001918460018302840111600160201b83111715610a4457600080fd5b5090925090506121db565b348015610a5b57600080fd5b506107b461251c565b348015610a7057600080fd5b5061044060048036036020811015610a8757600080fd5b503561257c565b348015610a9a57600080fd5b5061040461284c565b348015610aaf57600080fd5b5061044060048036036020811015610ac657600080fd5b810190602081018135600160201b811115610ae057600080fd5b820183602082011115610af257600080fd5b803590602001918460208302840111600160201b83111715610b1357600080fd5b509092509050612858565b348015610b2a57600080fd5b50610440600480360360e0811015610b4157600080fd5b506001600160a01b03813581169160208101351515916040820135169060608101359060808101359060a08101359060c00135612a7e565b348015610b8557600080fd5b50610440612b62565b348015610b9a57600080fd5b5061044060048036036020811015610bb157600080fd5b5035612c60565b348015610bc457600080fd5b50610404612d64565b348015610bd957600080fd5b50610be2612d6a565b604080516001600160a01b039092168252519081900360200190f35b348015610c0a57600080fd5b50610404612d79565b348015610c1f57600080fd5b5061044060048036036020811015610c3657600080fd5b810190602081018135600160201b811115610c5057600080fd5b820183602082011115610c6257600080fd5b803590602001918460208302840111600160201b83111715610c8357600080fd5b509092509050612d85565b348015610c9a57600080fd5b506104046130c7565b348015610caf57600080fd5b50610be26130cd565b348015610cc457600080fd5b506104406130dc565b348015610cd957600080fd5b50610404613139565b348015610cee57600080fd5b5061044060048036036020811015610d0557600080fd5b810190602081018135600160201b811115610d1f57600080fd5b820183602082011115610d3157600080fd5b803590602001918460018302840111600160201b83111715610d5257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061313f945050505050565b348015610d9f57600080fd5b506103db613272565b348015610db457600080fd5b5061044060048036036020811015610dcb57600080fd5b503561327b565b348015610dde57600080fd5b5061044060048036036040811015610df557600080fd5b506001600160a01b038135169060200135151561336b565b348015610e1957600080fd5b5061040460048036036040811015610e3057600080fd5b506001600160a01b038135169060200135613525565b348015610e5257600080fd5b506103db6135b5565b348015610e6757600080fd5b506103db6135be565b348015610e7c57600080fd5b5061044060048036036060811015610e9357600080fd5b506001600160a01b038135811691602081013590911690604001356135cd565b348015610ebf57600080fd5b50610404613757565b348015610ed457600080fd5b5061044060048036036020811015610eeb57600080fd5b503561375d565b348015610efe57600080fd5b50610404613ada565b348015610f1357600080fd5b50610404613ae0565b348015610f2857600080fd5b5061040460048036036020811015610f3f57600080fd5b810190602081018135600160201b811115610f5957600080fd5b820183602082011115610f6b57600080fd5b803590602001918460208302840111600160201b83111715610f8c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613ae6945050505050565b348015610fd657600080fd5b5061044060048036036020811015610fed57600080fd5b5035613b40565b34801561100057600080fd5b50610be26004803603602081101561101757600080fd5b5035613ce9565b34801561102a57600080fd5b50610404613d10565b34801561103f57600080fd5b506103db613d16565b34801561105457600080fd5b50610404613d24565b34801561106957600080fd5b506104406004803603602081101561108057600080fd5b5035613d2a565b34801561109357600080fd5b50610440600480360360208110156110aa57600080fd5b5035613e74565b3480156110bd57600080fd5b50610404600480360360408110156110d457600080fd5b506001600160a01b038135169060200135613ecd565b3480156110f657600080fd5b506104406004803603602081101561110d57600080fd5b5035614080565b34801561112057600080fd5b506104406004803603602081101561113757600080fd5b50356140d9565b34801561114a57600080fd5b506104406004803603602081101561116157600080fd5b810190602081018135600160201b81111561117b57600080fd5b82018360208201111561118d57600080fd5b803590602001918460208302840111600160201b831117156111ae57600080fd5b509092509050614132565b3480156111c557600080fd5b506103db614484565b3480156111da57600080fd5b50610404600480360360208110156111f157600080fd5b50356001600160a01b031661448d565b6001600160e01b031981166301ffc9a760e01b145b919050565b603e545b90565b61122b33614498565b8061123557503330145b611279576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561129857506706f05b59d3b200008111155b6112df576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b6112f060408263ffffffff6144ac16565b604080513381526020810183905281517f41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e929181900390910190a150565b61133733614498565b80611346575061134633614515565b611390576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a5460ff166113df576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b611442603880548060200260200160405190810160405280929190818152602001828054801561143857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161141a575b5050505050613ae6565b811461147f5760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b61148b60386000615b9b565b603a805460ff19169055604080513381526020810183905281517f7794eff834d760583543e6e510e717a5e66d2c064e225f4db448343c3e66afcf929181900390910190a150565b60405180604001604052806005815260200164332e342e3160d81b81525081565b600080611507848463ffffffff6145a916565b905061151281614498565b611557576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b50630b135d3f60e11b90505b92915050565b61157233614498565b8061157c57503330145b6115c0576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b80611609576040805162461bcd60e51b8152602060048201526014602482015273617373657420617272617920697320656d70747960601b604482015290519081900360640190fd5b60005b8181101561166b57600061163a84848481811061162557fe5b905060200201356001600160a01b0316614697565b90506116628585858581811061164c57fe5b905060200201356001600160a01b0316836135cd565b5060010161160c565b507fd4f62f23021706247dcffea245d104ae7ddaec7f23acf3d11d7136d5de6a69ad83838360405180846001600160a01b03166001600160a01b03168152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60006116fa6047614728565b905090565b6000808585604051602001808383808284376040805191909301818103601f190182528084528151602092830120601f8b01839004830282018301909452898152929650630b135d3f60e11b955061177694508693508991508890819084018382808284376000920191909152506114f492505050565b6001600160e01b031916146117c2576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b506320c13b0b60e01b95945050505050565b603554600160a01b900460ff1690565b6117ed33614498565b806117f757503330145b61183b576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61184c603b8263ffffffff61475d16565b6040805182815290517f4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da919181900360200190a150565b60405490565b603a5460ff1681565b606060398054806020026020016040519081016040528092919081815260200182805480156118e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118cb575b5050505050905090565b60366020526000908152604090205460ff1681565b61191133614498565b8061191b57503330145b61195f576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b611968826147be565b6119ae576040805162461bcd60e51b8152602060048201526012602482015271746f6b656e206e6f74206c6f616461626c6560701b604482015290519081900360640190fd5b60006119ba8383613ecd565b90506119cd60478263ffffffff6147d816565b60006119da604d5461484e565b90506001600160a01b03841615611a8257611a056001600160a01b038516828563ffffffff61496f16565b806001600160a01b0316631b3c96b485856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b50505050611afc565b806001600160a01b0316631b3c96b48486866040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001828152602001925050506000604051808303818588803b158015611ae257600080fd5b505af1158015611af6573d6000803e3d6000fd5b50505050505b604080516001600160a01b03861681526020810185905281517f5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a929181900390910190a150505050565b611b4f33614498565b80611b5957503330145b611b9d576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b604654811115611bef576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b611c0060478263ffffffff6144ac16565b604080513381526020810183905281517f0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef929181900390910190a150565b611c4733614498565b80611c5157503330145b611c95576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b611ca6603b8263ffffffff6144ac16565b604080513381526020810183905281517f068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21929181900390910190a150565b6060611cef33614498565b80611cf957503330145b611d3d576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6001600160a01b03841660009081526036602052604090205460ff16611d6e57611d6e603b8463ffffffff6147d816565b611d80846001600160a01b0316614a87565b8015611d905750611d9084614a8d565b15611f7757600080611da28685614aa7565b6001600160a01b038216600090815260366020526040902054919350915060ff16611de8576000611dd38783613525565b9050611de6603b8263ffffffff6147d816565b505b611e016001600160a01b0387168563ffffffff614bb116565b604080516020808252818301909252606091602082018180388339019050509050600160f81b81601f81518110611e3457fe5b60200101906001600160f81b031916908160001a9053507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138787878460405180856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ecf578181015183820152602001611eb7565b50505050905090810190601f168015611efc5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f2f578181015183820152602001611f17565b50505050905090810190601f168015611f5c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a192506121d4915050565b60006060856001600160a01b031685856040518082805190602001908083835b60208310611fb65780518252601f199092019160209182019101611f97565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612018576040519150601f19603f3d011682016040523d82523d6000602084013e61201d565b606091505b50915091508181906120ad5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561207257818101518382015260200161205a565b50505050905090810190601f16801561209f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138686868460405180856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561213257818101518382015260200161211a565b50505050905090810190601f16801561215f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561219257818101518382015260200161217a565b50505050905090810190601f1680156121bf5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a19150505b9392505050565b6121e433614515565b612223576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b600046905060006122a3823089898960405160200180806836b7b737b634ba341d60b91b815250600901868152602001856001600160a01b03166001600160a01b031660601b8152601401848152602001838380828437808301925050509550505050505060405160208183030381529060405280519060200120614d6f565b9050631626ba7e60e01b6001600160e01b0319166122f78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114f492505050565b6001600160e01b03191614612343576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b604c548714612385576040805162461bcd60e51b81526020600482015260096024820152687478207265706c617960b81b604482015290519081900360640190fd5b61238d614dc0565b60006060306001600160a01b03168888604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146123ed576040519150601f19603f3d011682016040523d82523d6000602084013e6123f2565b606091505b50915091508181906124455760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207257818101518382015260200161205a565b507f823dbcf2b7b0f265871963ca65ac033f6b4c71e0d82cd123d2ff23d752dc21c188888360405180806020018060200183810383528686828181526020019250808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b838110156124d45781810151838201526020016124bc565b50505050905090810190601f1680156125015780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050505050565b606060388054806020026020016040519081016040528092919081815260200182805480156118e9576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116118cb575050505050905090565b61258533614515565b6125c4576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b603a5460ff16612613576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6126746038805480602002602001604051908101604052809291908181526020018280548015611438576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141a575050505050613ae6565b81146126b15760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b60005b6038548110156127985760366000603883815481106126cf57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16612790576001603660006038848154811061270e57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560388054603791908390811061275457fe5b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b6001016126b4565b507fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a33603860405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818154815260200191508054801561282457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612806575b5050935050505060405180910390a161283f60386000615b9b565b50603a805460ff19169055565b60006116fa603b614728565b61286133614498565b8061286b57503330145b6128af576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff161580156128ca5750603a54610100900460ff16155b61291b576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b603a5462010000900460ff16612974576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b806129b8576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b6129c460398383615bb9565b50603a805461ff00191661010017905560408051602080840282810182019093528382527ffbc0e5ca6c7e4858daf0fdb185ef5186203e74ec9c64737e93c0aeaec596e1d19285928592612a3392859185918291850190849080828437600092019190915250613ae692505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b600054610100900460ff1680612a975750612a97614e08565b80612aa5575060005460ff16155b612ae05760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015612b0b576000805460ff1961ff0019909116610100171660011790555b612b1486614e0e565b612b1d84614edc565b612b278888614f89565b612b30826150e8565b612b386151d3565b612b41856152c4565b604d8390558015612b58576000805461ff00191690555b5050505050505050565b612b6b33614498565b612bb5576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16612c13576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b612c6933614498565b80612c7357503330145b612cb7576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c6800011158015612cd657506706f05b59d3b200008111155b612d1d576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b612d2e60408263ffffffff61475d16565b6040805182815290517faf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c9181900360200190a150565b604d5490565b6033546001600160a01b031690565b60006116fa6040614728565b612d8e33614498565b80612d9857503330145b612ddc576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015612df75750603a54610100900460ff16155b612e48576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015612f6457612ea1828281518110612e9457fe5b6020026020010151614498565b15612eec576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110612f0357fe5b60200260200101516001600160a01b03161415612f5c576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101612e7c565b50603a5462010000900460ff16612fbe576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b81613002576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b61300e60388484615bb9565b50603a805460ff1916600117905560408051602080850282810182019093528482527f9c80b3b5f68b3e017766d59e8d09b34efe6462b05c398f35cab9e271d9bc3b9c928692869261307b92859185918291850190849080828437600092019190915250613ae692505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60455490565b6035546001600160a01b031690565b6130e533614498565b61312f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b613137614dc0565b565b603b5490565b61314833614498565b8061315257503330145b613196576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8051602080820191906000808060605b86851015612b58576131bf86605463ffffffff61541616565b888601805160148201516034909201805193995060609190911c9650909450909250905061320460546131f8878563ffffffff61547316565b9063ffffffff61547316565b94508685111561324b576040805162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b604482015290519081900360640190fd5b8161326157506040805160208101909152600081525b61326c848483611ce4565b506131a6565b604b5460ff1690565b61328433614498565b8061328e57503330145b6132d2576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b604654811115613324576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b61333560478263ffffffff61475d16565b6040805182815290517fc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d109181900360200190a150565b61337433614498565b6133be576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff1661341c576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166134615760405162461bcd60e51b8152600401808060200182810382526023815260200180615d0c6023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b83151502179055806134ba57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080613534866154cd565b5050509350935093505080156135a9578161357f576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b61359f83613593878563ffffffff61565f16565b9063ffffffff6156b816565b9350505050611563565b50600095945050505050565b603f5460ff1690565b603a5462010000900460ff1681565b6135d633614498565b806135e057503330145b613624576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8080613661576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b6001600160a01b0384166136ac576040805162461bcd60e51b815260206004820152600d60248201526c064657374696e6174696f6e3d3609c1b604482015290519081900360640190fd5b6001600160a01b03841660009081526036602052604090205460ff166136fc57816001600160a01b038416156136e9576136e68484613525565b90505b6136fa603b8263ffffffff6147d816565b505b613707848484615722565b604080516001600160a01b0380871682528516602082015280820184905290517fd1ba4ac2e2a11b5101f6cb4d978f514a155b421e8ec396d2d9abaf0bb02917ee9181900360600190a150505050565b604a5490565b61376633614515565b6137a5576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b603a54610100900460ff166137f9576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61385a6039805480602002602001604051908101604052809291908181526020018280548015611438576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141a575050505050613ae6565b81146138975760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b60005b603954811015613a255760366000603983815481106138b557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615613a1d57600060366000603984815481106138f557fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091555b60375461393f90600163ffffffff61541616565b811015613a07576039828154811061395357fe5b600091825260209091200154603780546001600160a01b03909216918390811061397957fe5b6000918252602090912001546001600160a01b031614156139ff576037805460001981019081106139a657fe5b600091825260209091200154603780546001600160a01b0390921691839081106139cc57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613a07565b60010161392b565b506037805490613a1b906000198301615c1c565b505b60010161389a565b507fd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b33603960405180836001600160a01b03166001600160a01b03168152602001806020018281038252838181548152602001915080548015613ab157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613a93575b5050935050505060405180910390a1613acc60396000615b9b565b50603a805461ff0019169055565b60435490565b604c5481565b60008160405160200180828051906020019060200280838360005b83811015613b19578181015183820152602001613b01565b50505050905001915050604051602081830303815290604052805190602001209050919050565b613b4933614498565b80613b585750613b5833614515565b613ba2576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a54610100900460ff16613bf6576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b613c576039805480602002602001604051908101604052809291908181526020018280548015611438576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141a575050505050613ae6565b8114613c945760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b613ca060396000615b9b565b603a805461ff0019169055604080513381526020810183905281517f13c935eb475aa0f6e931fece83e2ac44569ce2d53460d29a6dedab40b965c8a3929181900390910190a150565b60378181548110613cf657fe5b6000918252602090912001546001600160a01b0316905081565b60475490565b603a54610100900460ff1681565b60345490565b8080613d67576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b613d7033614498565b80613d7f5750613d7f33614515565b613dc9576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b613dda60408363ffffffff6147d816565b613de26130cd565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015613e1a573d6000803e3d6000fd5b507f611b7c0d84fda988026215bef9b3e4d81cbceced7e679be6d5e044b588467c0e33613e456130cd565b604080516001600160a01b03938416815291909216602082015280820185905290519081900360600190a15050565b613e7d33614515565b613ebc576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b611ca6603b8263ffffffff6157ec16565b6000613ed761583c565b6001600160a01b0316836001600160a01b03161415613ef7575080611563565b816001600160a01b03841615613fbc576000806000613f15876154cd565b5050509350935093505080613f67576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b81613fa2576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b613fb683613593888563ffffffff61565f16565b93505050505b6000806000613fc96158b2565b505050935093509350508061401b576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b81614061576040805162461bcd60e51b81526020600482015260116024820152700737461626c65636f696e20726174653d3607c1b604482015290519081900360640190fd5b61407582613593868663ffffffff61565f16565b979650505050505050565b61408933614515565b6140c8576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b611c0060478263ffffffff6157ec16565b6140e233614515565b614121576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b6112f060408263ffffffff6157ec16565b61413b33614498565b8061414557503330145b614189576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015614298576141d5828281518110612e9457fe5b15614220576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b031682828151811061423757fe5b60200260200101516001600160a01b03161415614290576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b6001016141bd565b50603a5462010000900460ff16156142ef576040805162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081a5b9a5d1a585b1a5e9959605a1b604482015290519081900360640190fd5b60005b828110156143e0576036600085858481811061430a57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff166143d85760016036600086868581811061434657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550603784848381811061439b57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055505b6001016142f2565b50603a805462ff0000191662010000179055604080513380825260208201838152603780549484018590527fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a949293909290919060608301908490801561447057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614452575b5050935050505060405180910390a1505050565b60445460ff1690565b600061156382614697565b6035546001600160a01b0390811691161490565b600482015460ff16156144fa576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6145048282615a21565b50600401805460ff19166001179055565b600061452260345461484e565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561457757600080fd5b505afa15801561458b573d6000803e3d6000fd5b505050506040513d60208110156145a157600080fd5b505192915050565b600081516041146145bc57506000611563565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156146025760009350505050611563565b8060ff16601b1415801561461a57508060ff16601c14155b1561462b5760009350505050611563565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015614682573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0382161561472157604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156146ee57600080fd5b505afa158015614702573d6000803e3d6000fd5b505050506040513d602081101561471857600080fd5b50519050611216565b5047611216565b6002810154600090614743906201518063ffffffff61547316565b42111561475257508054611216565b506001810154611216565b600482015460ff166147b6576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b6000806147ca836154cd565b509098975050505050505050565b6147e182615a44565b808260010154101561482d576040805162461bcd60e51b815260206004820152601060248201526f185d985a5b18589b194f185b5bdd5b9d60821b604482015290519081900360640190fd5b6001820154614842908263ffffffff61541616565b82600101819055505050565b6033546000906001600160a01b03166148ae576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156148fa57600080fd5b505afa15801561490e573d6000803e3d6000fd5b505050506040513d602081101561492457600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561457757600080fd5b8015806149f5575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156149c757600080fd5b505afa1580156149db573d6000803e3d6000fd5b505050506040513d60208110156149f157600080fd5b5051155b614a305760405162461bcd60e51b8152600401808060200182810382526036815260200180615d7c6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052614a82908490614bb1565b505050565b3b151590565b600080614a99836154cd565b509198975050505050505050565b600080614ab560455461484e565b6001600160a01b031663afc72e9385856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b29578181015183820152602001614b11565b50505050905090810190601f168015614b565780820380516001836020036101000a031916815260200191505b509350505050604080518083038186803b158015614b7357600080fd5b505afa158015614b87573d6000803e3d6000fd5b505050506040513d6040811015614b9d57600080fd5b508051602090910151909590945092505050565b614bc3826001600160a01b0316614a87565b614c14576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310614c525780518252601f199092019160209182019101614c33565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614cb4576040519150601f19603f3d011682016040523d82523d6000602084013e614cb9565b606091505b509150915081614d10576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115614d6957808060200190516020811015614d2c57600080fd5b5051614d695760405162461bcd60e51b815260040180806020018281038252602a815260200180615d2f602a913960400191505060405180910390fd5b50505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b604c80546001019081905560408051338152602081019290925280517fab0423a75986556234aecd171c46ce7f5e45607d8070bf5230f2735b50322bff9281900390910190a1565b303b1590565b600054610100900460ff1680614e275750614e27614e08565b80614e35575060005460ff16155b614e705760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015614e9b576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615614ec657603380546001600160a01b0319166001600160a01b0384161790555b8015614ed8576000805461ff00191690555b5050565b600054610100900460ff1680614ef55750614ef5614e08565b80614f03575060005460ff16155b614f3e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015614f69576000805460ff1961ff0019909116610100171660011790555b8115614ec65760348290558015614ed8576000805461ff00191690555050565b600054610100900460ff1680614fa25750614fa2614e08565b80614fb0575060005460ff16155b614feb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615016576000805460ff1961ff0019909116610100171660011790555b603580546001600160a01b0319166001600160a01b0385161760ff60a01b1916600160a01b8415158102919091179182905560ff91041661508e57604080516001600160a01b038516815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b60408051600081526001600160a01b038516602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a18015614a82576000805461ff0019169055505050565b600054610100900460ff16806151015750615101614e08565b8061510f575060005460ff16155b61514a5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615175576000805460ff1961ff0019909116610100171660011790555b6040805160a08101825283815260208101849052429181018290526000606082018190526080909101819052603b849055603c849055603d91909155603e55603f805460ff191690558015614ed8576000805461ff00191690555050565b600054610100900460ff16806151ec57506151ec614e08565b806151fa575060005460ff16155b6152355760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615260576000805460ff1961ff0019909116610100171660011790555b6040805160a0810182526706f05b59d3b2000080825260208201819052428284018190526000606084018190526080909301839052928190556041556042919091556043556044805460ff1916905580156152c1576000805461ff00191690555b50565b600054610100900460ff16806152dd57506152dd614e08565b806152eb575060005460ff16155b6153265760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615351576000805460ff1961ff0019909116610100171660011790555b61535a82615a9c565b60006153646158b2565b5050505050915050600081116153b1576040805162461bcd60e51b815260206004820152600d60248201526c37379039ba30b13632b1b7b4b760991b604482015290519081900360640190fd5b6127100260468190556040805160a081018252828152602081018390524291810182905260006060820181905260809091018190526047839055604892909255604955604a55604b805460ff191690558015614ed8576000805461ff00191690555050565b60008282111561546d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000828201838110156121d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60606000806000806000806154e360455461484e565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060006040518083038186803b15801561553857600080fd5b505afa15801561554c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561557557600080fd5b8101908080516040519392919084600160201b82111561559457600080fd5b9083019060208201858111156155a957600080fd5b8251600160201b8111828201881017156155c257600080fd5b82525081516020918201929091019080838360005b838110156155ef5781810151838201526020016155d7565b50505050905090810190601f16801561561c5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b60008261566e57506000611563565b8282028284828161567b57fe5b04146121d45760405162461bcd60e51b8152600401808060200182810382526021815260200180615cbd6021913960400191505060405180910390fd5b600080821161570e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161571957fe5b04949350505050565b6001600160a01b0382166157d2576040516000906001600160a01b0385169083908381818185875af1925050503d806000811461577b576040519150601f19603f3d011682016040523d82523d6000602084013e615780565b606091505b50509050806157cc576040805162461bcd60e51b81526020600482015260136024820152721cd85999551c985b9cd9995c8819985a5b1959606a1b604482015290519081900360640190fd5b50614a82565b614a826001600160a01b038316848363ffffffff615b4916565b8082600301541461582e5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c7b6022913960400191505060405180910390fd5b614ed8828360030154615a21565b600061584960455461484e565b6001600160a01b031663e9cbd8226040518163ffffffff1660e01b815260040160206040518083038186803b15801561588157600080fd5b505afa158015615895573d6000803e3d6000fd5b505050506040513d60208110156158ab57600080fd5b5051905090565b60606000806000806000806158c860455461484e565b6001600160a01b0316633efec5e96040518163ffffffff1660e01b815260040160006040518083038186803b15801561590057600080fd5b505afa158015615914573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561593d57600080fd5b8101908080516040519392919084600160201b82111561595c57600080fd5b90830190602082018581111561597157600080fd5b8251600160201b81118282018810171561598a57600080fd5b82525081516020918201929091019080838360005b838110156159b757818101518382015260200161599f565b50505050905090810190601f1680156159e45780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979f939e50919c509a5098509096509294509192505050565b615a2a82615a44565b8082556001820154811015614ed857815460018301555050565b6002810154615a5c906201518063ffffffff61547316565b4211156152c157426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a150565b600054610100900460ff1680615ab55750615ab5614e08565b80615ac3575060005460ff16155b615afe5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615b29576000805460ff1961ff0019909116610100171660011790555b8115614ec65760458290558015614ed8576000805461ff00191690555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052614a82908490614bb1565b50805460008255906000526020600020908101906152c19190615c3c565b828054828255906000526020600020908101928215615c0c579160200282015b82811115615c0c5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190615bd9565b50615c18929150615c56565b5090565b815481835581811115614a8257600083815260209020614a829181019083015b61121f91905b80821115615c185760008155600101615c42565b61121f91905b80821115615c185780546001600160a01b0319168155600101615c5c56fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d6174636873656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65646f776e65722063616e6e6f742062652073657420746f207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646e6f6e2d6d61746368696e672070656e64696e672077686974656c69737420686173685361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158200650f450c2d8f8fc75477f70e683f64b5cc64733a3582ce80a54555fd95dd90364736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH15 0xC2E074EC69A0DFB2997BA6C7D2E1E OR SWAP1 SSTORE PUSH32 0x7F2CE995617D2816B426C5C8698C5EC2952F7A34BB10F38326F74933D5893697 PUSH1 0x34 SSTORE PUSH32 0xE84F90570F13FE09F288F2411FF9CF50DA611ED0C7DB7F73D48053FFC974D396 PUSH1 0x45 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5DE6 DUP1 PUSH3 0x8A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3A2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7FD004FA GT PUSH2 0x1E7 JUMPI DUP1 PUSH4 0xCC0E7E56 GT PUSH2 0x10D JUMPI DUP1 PUSH4 0xE61C51CA GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xF41C4319 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xF41C4319 EQ PUSH2 0x1114 JUMPI DUP1 PUSH4 0xF4217648 EQ PUSH2 0x113E JUMPI DUP1 PUSH4 0xF776F518 EQ PUSH2 0x11B9 JUMPI DUP1 PUSH4 0xF8B2CB4F EQ PUSH2 0x11CE JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xE61C51CA EQ PUSH2 0x105D JUMPI DUP1 PUSH4 0xEADD3CEA EQ PUSH2 0x1087 JUMPI DUP1 PUSH4 0xF36FEBDA EQ PUSH2 0x10B1 JUMPI DUP1 PUSH4 0xF40B51F8 EQ PUSH2 0x10EA JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xD251FEFC GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD251FEFC EQ PUSH2 0xFF4 JUMPI DUP1 PUSH4 0xDA84B1ED EQ PUSH2 0x101E JUMPI DUP1 PUSH4 0xDE212BF3 EQ PUSH2 0x1033 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1048 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xCC0E7E56 EQ PUSH2 0xEF2 JUMPI DUP1 PUSH4 0xCCCDC556 EQ PUSH2 0xF07 JUMPI DUP1 PUSH4 0xCD7958DD EQ PUSH2 0xF1C JUMPI DUP1 PUSH4 0xCE0B5BD5 EQ PUSH2 0xFCA JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xB221F316 GT PUSH2 0x185 JUMPI DUP1 PUSH4 0xBE40BA79 GT PUSH2 0x154 JUMPI DUP1 PUSH4 0xBE40BA79 EQ PUSH2 0xE5B JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xE70 JUMPI DUP1 PUSH4 0xC4856CD9 EQ PUSH2 0xEB3 JUMPI DUP1 PUSH4 0xCBD2AC68 EQ PUSH2 0xEC8 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xB221F316 EQ PUSH2 0xDA8 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0xDD2 JUMPI DUP1 PUSH4 0xB87E21EF EQ PUSH2 0xE0D JUMPI DUP1 PUSH4 0xBCB8B74A EQ PUSH2 0xE46 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x90E690C7 GT PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x90E690C7 EQ PUSH2 0xCB8 JUMPI DUP1 PUSH4 0x9B0DFD27 EQ PUSH2 0xCCD JUMPI DUP1 PUSH4 0xAAF1FC62 EQ PUSH2 0xCE2 JUMPI DUP1 PUSH4 0xAB205993 EQ PUSH2 0xD93 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x7FD004FA EQ PUSH2 0xC13 JUMPI DUP1 PUSH4 0x877337B0 EQ PUSH2 0xC8E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xCA3 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x3A43199F GT PUSH2 0x2CC JUMPI DUP1 PUSH4 0x5D2362A8 GT PUSH2 0x26A JUMPI DUP1 PUSH4 0x74624C55 GT PUSH2 0x239 JUMPI DUP1 PUSH4 0x74624C55 EQ PUSH2 0xB8E JUMPI DUP1 PUSH4 0x747C31D6 EQ PUSH2 0xBB8 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0xBCD JUMPI DUP1 PUSH4 0x7D7D0046 EQ PUSH2 0xBFE JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x5D2362A8 EQ PUSH2 0xA8E JUMPI DUP1 PUSH4 0x6137D670 EQ PUSH2 0xAA3 JUMPI DUP1 PUSH4 0x69EFDFC0 EQ PUSH2 0xB1E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB79 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x3F579F42 GT PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x3F579F42 EQ PUSH2 0x8B7 JUMPI DUP1 PUSH4 0x46EFE0ED EQ PUSH2 0x97D JUMPI DUP1 PUSH4 0x47B55A9D EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0x5ADC02AB EQ PUSH2 0xA64 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x3A43199F EQ PUSH2 0x837 JUMPI DUP1 PUSH4 0x3BFEC254 EQ PUSH2 0x863 JUMPI DUP1 PUSH4 0x3C672EB7 EQ PUSH2 0x88D JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x1EFD0299 GT PUSH2 0x344 JUMPI DUP1 PUSH4 0x2587A6A2 GT PUSH2 0x313 JUMPI DUP1 PUSH4 0x2587A6A2 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x26D05AB2 EQ PUSH2 0x78A JUMPI DUP1 PUSH4 0x294F4025 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0x32531C3C EQ PUSH2 0x804 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x1EFD0299 EQ PUSH2 0x656 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0x66B JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x21CE918D EQ PUSH2 0x74B JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x100F23FD GT PUSH2 0x380 JUMPI DUP1 PUSH4 0x100F23FD EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0x1127B57E EQ PUSH2 0x46C JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x1AA21FBA EQ PUSH2 0x5CB JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x3A7 JUMPI DUP1 PUSH4 0x27EF3EB EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0xF3A85D8 EQ PUSH2 0x416 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH2 0x1201 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x439 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1222 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x132E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x481 PUSH2 0x14D3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4BB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4A3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4E8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x54C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x14F4 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x64B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1569 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x662 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x16EE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x677 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x68E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x6A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x6DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x6F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x742 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x17D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x17E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x1882 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x796 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x1888 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B4 PUSH2 0x1891 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x7F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x810 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x827 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x18F3 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x84D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1908 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1B46 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x899 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C3E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x481 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x8DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x91B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1CE4 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x9C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x9F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xA11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xA44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x21DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B4 PUSH2 0x251C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x257C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x284C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xB13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2858 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD ISZERO ISZERO SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x2A7E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH2 0x2B62 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2C60 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x2D64 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE2 PUSH2 0x2D6A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x2D79 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xC50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xC83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2D85 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x30C7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE2 PUSH2 0x30CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH2 0x30DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3139 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xD1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xD52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x313F SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x3272 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x327B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x336B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3525 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x35B5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x35BE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xE93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x35CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3757 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x375D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3ADA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3AE0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xF59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xF8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x3AE6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3B40 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1017 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3CE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3D10 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x103F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x3D16 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1054 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3D24 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1069 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1080 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3D2A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1093 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3E74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3ECD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x110D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x4080 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x40D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x114A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x117B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x118D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x4132 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x4484 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x448D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3E SLOAD JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x122B CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1235 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1279 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x1298 JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x12DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12F0 PUSH1 0x40 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x44AC AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x41FF5D5CE3B7935893A4E7269EC5CAAE9CCA5E3BF0EB4B21D2F443489667112E SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x1337 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1346 JUMPI POP PUSH2 0x1346 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x1390 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x13DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1442 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x147F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x148B PUSH1 0x38 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x7794EFF834D760583543E6E510E717A5E66D2C064E225F4DB448343C3E66AFCF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x332E342E31 PUSH1 0xD8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1507 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x45A9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1512 DUP2 PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x1557 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x696E76616C6964207369676E6174757265 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH4 0xB135D3F PUSH1 0xE1 SHL SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1572 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x157C JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x15C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x1609 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x617373657420617272617920697320656D707479 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x166B JUMPI PUSH1 0x0 PUSH2 0x163A DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x1625 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4697 JUMP JUMPDEST SWAP1 POP PUSH2 0x1662 DUP6 DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x164C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0x35CD JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x160C JUMP JUMPDEST POP PUSH32 0xD4F62F23021706247DCFFEA245D104AE7DDAEC7F23ACF3D11D7136D5DE6A69AD DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16FA PUSH1 0x47 PUSH2 0x4728 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 DUP2 SUB PUSH1 0x1F NOT ADD DUP3 MSTORE DUP1 DUP5 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x1F DUP12 ADD DUP4 SWAP1 DIV DUP4 MUL DUP3 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP10 DUP2 MSTORE SWAP3 SWAP7 POP PUSH4 0xB135D3F PUSH1 0xE1 SHL SWAP6 POP PUSH2 0x1776 SWAP5 POP DUP7 SWAP4 POP DUP10 SWAP2 POP DUP9 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x14F4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0x17C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x1CDA59C81B9BDD081D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x17ED CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x17F7 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x183B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x184C PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x475D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x4B1B970C8A0FA761E7803ED70C13D7ACA71904B13DF60FBE03F981DA1730DA91 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x18E9 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x18CB JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1911 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x191B JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x195F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1968 DUP3 PUSH2 0x47BE JUMP JUMPDEST PUSH2 0x19AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x746F6B656E206E6F74206C6F616461626C65 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x19BA DUP4 DUP4 PUSH2 0x3ECD JUMP JUMPDEST SWAP1 POP PUSH2 0x19CD PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DA PUSH1 0x4D SLOAD PUSH2 0x484E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x1A82 JUMPI PUSH2 0x1A05 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x496F AND JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1B3C96B4 DUP6 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1AFC JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1B3C96B4 DUP5 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x5F65674BEC9AF81F71BE68674135A0EA3F163FB91984E3893D06DA9F6EA2CE8A SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x1B4F CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1B59 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1B9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x46 SLOAD DUP2 GT ISZERO PUSH2 0x1BEF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1C00 PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x44AC AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB05243483E17C3F3377AEE82B7D47E5700B48288695FC08B7ECC2759AFA44EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x1C47 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1C51 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1C95 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1CA6 PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x44AC AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x68F112E5EC923D412BE64779FE69E0FCBB6784C6617E94CCCC8FD348F2E0F21 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1CEF CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1CF9 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1D3D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1D6E JUMPI PUSH2 0x1D6E PUSH1 0x3B DUP5 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST PUSH2 0x1D80 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A87 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1D90 JUMPI POP PUSH2 0x1D90 DUP5 PUSH2 0x4A8D JUMP JUMPDEST ISZERO PUSH2 0x1F77 JUMPI PUSH1 0x0 DUP1 PUSH2 0x1DA2 DUP7 DUP6 PUSH2 0x4AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH1 0xFF AND PUSH2 0x1DE8 JUMPI PUSH1 0x0 PUSH2 0x1DD3 DUP8 DUP4 PUSH2 0x3525 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DE6 PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST POP JUMPDEST PUSH2 0x1E01 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP6 PUSH4 0xFFFFFFFF PUSH2 0x4BB1 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x1 PUSH1 0xF8 SHL DUP2 PUSH1 0x1F DUP2 MLOAD DUP2 LT PUSH2 0x1E34 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0xF77753FAB406ECFFF96D6FF2476C64A838FA9F6D37B1BF190F8546E395E3B613 DUP8 DUP8 DUP8 DUP5 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1ECF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EB7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EFC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F2F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F17 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F5C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP3 POP PUSH2 0x21D4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1FB6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1F97 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2018 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x201D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x20AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2072 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x205A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x209F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH32 0xF77753FAB406ECFFF96D6FF2476C64A838FA9F6D37B1BF190F8546E395E3B613 DUP7 DUP7 DUP7 DUP5 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2132 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x211A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x215F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2192 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x217A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x21BF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x21E4 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x2223 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP PUSH1 0x0 PUSH2 0x22A3 DUP3 ADDRESS DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH9 0x36B7B737B634BA341D PUSH1 0xB9 SHL DUP2 MSTORE POP PUSH1 0x9 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x4D6F JUMP JUMPDEST SWAP1 POP PUSH4 0x1626BA7E PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH2 0x22F7 DUP3 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x14F4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0x2343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x1CDA59C81B9BDD081D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4C SLOAD DUP8 EQ PUSH2 0x2385 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x7478207265706C6179 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x238D PUSH2 0x4DC0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP4 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23ED JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x23F2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x2445 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x2072 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x205A JUMP JUMPDEST POP PUSH32 0x823DBCF2B7B0F265871963CA65AC033F6B4C71E0D82CD123D2FF23D752DC21C1 DUP9 DUP9 DUP4 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP7 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP6 DUP2 SUB DUP5 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP4 SWAP2 DUP9 ADD SWAP3 POP SWAP1 DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24D4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2501 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x18E9 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x18CB JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2585 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x25C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x2613 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2674 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x26B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x38 SLOAD DUP2 LT ISZERO PUSH2 0x2798 JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x26CF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2790 JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x270E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x38 DUP1 SLOAD PUSH1 0x37 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x2754 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE SWAP4 DUP4 MSTORE SWAP2 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x26B4 JUMP JUMPDEST POP PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A CALLER PUSH1 0x38 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x2824 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2806 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x283F PUSH1 0x38 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16FA PUSH1 0x3B PUSH2 0x4728 JUMP JUMPDEST PUSH2 0x2861 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x286B JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x28AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x28CA JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x291B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2974 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x29B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x29C4 PUSH1 0x39 DUP4 DUP4 PUSH2 0x5BB9 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP4 DUP3 MSTORE PUSH32 0xFBC0E5CA6C7E4858DAF0FDB185EF5186203E74EC9C64737E93C0AEAEC596E1D1 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH2 0x2A33 SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x3AE6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x2A97 JUMPI POP PUSH2 0x2A97 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x2AA5 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2AE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2B0B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x2B14 DUP7 PUSH2 0x4E0E JUMP JUMPDEST PUSH2 0x2B1D DUP5 PUSH2 0x4EDC JUMP JUMPDEST PUSH2 0x2B27 DUP9 DUP9 PUSH2 0x4F89 JUMP JUMPDEST PUSH2 0x2B30 DUP3 PUSH2 0x50E8 JUMP JUMPDEST PUSH2 0x2B38 PUSH2 0x51D3 JUMP JUMPDEST PUSH2 0x2B41 DUP6 PUSH2 0x52C4 JUMP JUMPDEST PUSH1 0x4D DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2B58 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2B6B CALLER PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x2BB5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x2C69 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x2C73 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x2CB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x2CD6 JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x2D1D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2D2E PUSH1 0x40 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x475D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF2A77CD04C3CC155588DD3BF67B310AB4FB3B1DA3CF6B8D7D4D2AA1D09B794C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x4D SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16FA PUSH1 0x40 PUSH2 0x4728 JUMP JUMPDEST PUSH2 0x2D8E CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x2D98 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x2DDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2DF7 JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2E48 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x2F64 JUMPI PUSH2 0x2EA1 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E94 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4498 JUMP JUMPDEST ISZERO PUSH2 0x2EEC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2F03 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2F5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x2E7C JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2FBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x3002 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x300E PUSH1 0x38 DUP5 DUP5 PUSH2 0x5BB9 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE PUSH32 0x9C80B3B5F68B3E017766D59E8D09B34EFE6462B05C398F35CAB9E271D9BC3B9C SWAP3 DUP7 SWAP3 DUP7 SWAP3 PUSH2 0x307B SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x3AE6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x45 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x30E5 CALLER PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x312F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3137 PUSH2 0x4DC0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3148 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x3152 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x3196 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 DUP1 DUP1 PUSH1 0x60 JUMPDEST DUP7 DUP6 LT ISZERO PUSH2 0x2B58 JUMPI PUSH2 0x31BF DUP7 PUSH1 0x54 PUSH4 0xFFFFFFFF PUSH2 0x5416 AND JUMP JUMPDEST DUP9 DUP7 ADD DUP1 MLOAD PUSH1 0x14 DUP3 ADD MLOAD PUSH1 0x34 SWAP1 SWAP3 ADD DUP1 MLOAD SWAP4 SWAP10 POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHR SWAP7 POP SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x3204 PUSH1 0x54 PUSH2 0x31F8 DUP8 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST SWAP5 POP DUP7 DUP6 GT ISZERO PUSH2 0x324B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x6F7574206F6620626F756E6473 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x3261 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE JUMPDEST PUSH2 0x326C DUP5 DUP5 DUP4 PUSH2 0x1CE4 JUMP JUMPDEST POP PUSH2 0x31A6 JUMP JUMPDEST PUSH1 0x4B SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3284 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x328E JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x32D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x46 SLOAD DUP2 GT ISZERO PUSH2 0x3324 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3335 PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x475D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC178D379965E5657B6FC57494E392F121A14119215DFB422AAD7DB4CC03F2D10 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x3374 CALLER PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x33BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x341C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3461 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D0C PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x34BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3534 DUP7 PUSH2 0x54CD JUMP JUMPDEST POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0x35A9 JUMPI DUP2 PUSH2 0x357F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x726174653D3 PUSH1 0xD4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x359F DUP4 PUSH2 0x3593 DUP8 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x565F AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x56B8 AND JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x1563 JUMP JUMPDEST POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x35D6 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x35E0 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x3624 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x3661 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x76616C75653D3 PUSH1 0xCC SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x36AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x64657374696E6174696F6E3D3 PUSH1 0x9C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x36FC JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x36E9 JUMPI PUSH2 0x36E6 DUP5 DUP5 PUSH2 0x3525 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x36FA PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST POP JUMPDEST PUSH2 0x3707 DUP5 DUP5 DUP5 PUSH2 0x5722 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND DUP3 MSTORE DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0xD1BA4AC2E2A11B5101F6CB4D978F514A155B421E8EC396D2D9ABAF0BB02917EE SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x4A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3766 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x37A5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x37F9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x385A PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x3897 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x39 SLOAD DUP2 LT ISZERO PUSH2 0x3A25 JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x38B5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3A1D JUMPI PUSH1 0x0 PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x38F5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE JUMPDEST PUSH1 0x37 SLOAD PUSH2 0x393F SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x5416 AND JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x3A07 JUMPI PUSH1 0x39 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3953 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x3979 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x39FF JUMPI PUSH1 0x37 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x39A6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x39CC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x3A07 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x392B JUMP JUMPDEST POP PUSH1 0x37 DUP1 SLOAD SWAP1 PUSH2 0x3A1B SWAP1 PUSH1 0x0 NOT DUP4 ADD PUSH2 0x5C1C JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x389A JUMP JUMPDEST POP PUSH32 0xD218C430FA348F4CE67791021B6B89C0C3EACD4EAD1D8F5B83C60038EC28249B CALLER PUSH1 0x39 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x3AB1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A93 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x3ACC PUSH1 0x39 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x43 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4C SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B19 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B01 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B49 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x3B58 JUMPI POP PUSH2 0x3B58 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x3BA2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3BF6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3C57 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x3C94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3CA0 PUSH1 0x39 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x13C935EB475AA0F6E931FECE83E2AC44569CE2D53460D29A6DEDAB40B965C8A3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x37 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x3CF6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x47 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x3D67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x76616C75653D3 PUSH1 0xCC SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3D70 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x3D7F JUMPI POP PUSH2 0x3D7F CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x3DC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3DDA PUSH1 0x40 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST PUSH2 0x3DE2 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8FC DUP4 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x3E1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH32 0x611B7C0D84FDA988026215BEF9B3E4D81CBCECED7E679BE6D5E044B588467C0E CALLER PUSH2 0x3E45 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP1 DUP3 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x3E7D CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x3EBC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1CA6 PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x57EC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3ED7 PUSH2 0x583C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3EF7 JUMPI POP DUP1 PUSH2 0x1563 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x3FBC JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3F15 DUP8 PUSH2 0x54CD JUMP JUMPDEST POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP POP DUP1 PUSH2 0x3F67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x746F6B656E206E6F7420617661696C61626C65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x3FA2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x726174653D3 PUSH1 0xD4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3FB6 DUP4 PUSH2 0x3593 DUP9 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x565F AND JUMP JUMPDEST SWAP4 POP POP POP POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3FC9 PUSH2 0x58B2 JUMP JUMPDEST POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP POP DUP1 PUSH2 0x401B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x746F6B656E206E6F7420617661696C61626C65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x4061 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x737461626C65636F696E20726174653D3 PUSH1 0x7C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4075 DUP3 PUSH2 0x3593 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x565F AND JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4089 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x40C8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1C00 PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x57EC AND JUMP JUMPDEST PUSH2 0x40E2 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x4121 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12F0 PUSH1 0x40 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x57EC AND JUMP JUMPDEST PUSH2 0x413B CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x4145 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x4189 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4298 JUMPI PUSH2 0x41D5 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E94 JUMPI INVALID JUMPDEST ISZERO PUSH2 0x4220 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4237 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4290 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x41BD JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x42EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1DDA1A5D195B1A5CDD081A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x43E0 JUMPI PUSH1 0x36 PUSH1 0x0 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x430A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE POP DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x43D8 JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x4346 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x37 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x439B JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x42F2 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 DUP2 MSTORE PUSH1 0x37 DUP1 SLOAD SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A SWAP5 SWAP3 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP5 SWAP1 DUP1 ISZERO PUSH2 0x4470 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4452 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x44 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1563 DUP3 PUSH2 0x4697 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x44FA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4504 DUP3 DUP3 PUSH2 0x5A21 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4522 PUSH1 0x34 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x458B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x45A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x45BC JUMPI POP PUSH1 0x0 PUSH2 0x1563 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x4602 JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x1563 JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x461A JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x462B JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x1563 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP5 AND DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4682 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x4721 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4702 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x1216 JUMP JUMPDEST POP SELFBALANCE PUSH2 0x1216 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4743 SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x4752 JUMPI POP DUP1 SLOAD PUSH2 0x1216 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x1216 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x47B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x47CA DUP4 PUSH2 0x54CD JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x47E1 DUP3 PUSH2 0x5A44 JUMP JUMPDEST DUP1 DUP3 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x482D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x185D985A5B18589B194F185B5BDD5B9D PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x4842 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x5416 AND JUMP JUMPDEST DUP3 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x48AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x48FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x490E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x49F5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP6 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x49C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x49F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO JUMPDEST PUSH2 0x4A30 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x36 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D7C PUSH1 0x36 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x4A82 SWAP1 DUP5 SWAP1 PUSH2 0x4BB1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4A99 DUP4 PUSH2 0x54CD JUMP JUMPDEST POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4AB5 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAFC72E93 DUP6 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4B56 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4B73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4B9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x4BC3 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A87 JUMP JUMPDEST PUSH2 0x4C14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A2063616C6C20746F206E6F6E2D636F6E747261637400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x4C52 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4C33 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4CB4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4CB9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x4D10 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x4D69 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x4D69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D2F PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x5C SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x4C DUP1 SLOAD PUSH1 0x1 ADD SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP1 MLOAD PUSH32 0xAB0423A75986556234AECD171C46CE7F5E45607D8070BF5230F2735B50322BFF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x4E27 JUMPI POP PUSH2 0x4E27 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x4E35 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x4E70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x4E9B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x4EC6 JUMPI PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x4EF5 JUMPI POP PUSH2 0x4EF5 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x4F03 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x4F3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x4F69 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP2 ISZERO PUSH2 0x4EC6 JUMPI PUSH1 0x34 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x4FA2 JUMPI POP PUSH2 0x4FA2 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x4FB0 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x4FEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5016 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP5 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0xFF SWAP2 DIV AND PUSH2 0x508E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 DUP1 ISZERO PUSH2 0x4A82 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x5101 JUMPI POP PUSH2 0x5101 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x510F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x514A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5175 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE TIMESTAMP SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD DUP2 SWAP1 MSTORE PUSH1 0x3B DUP5 SWAP1 SSTORE PUSH1 0x3C DUP5 SWAP1 SSTORE PUSH1 0x3D SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3E SSTORE PUSH1 0x3F DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x51EC JUMPI POP PUSH2 0x51EC PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x51FA JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x5235 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5260 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH8 0x6F05B59D3B20000 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE TIMESTAMP DUP3 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 SWAP1 SWAP4 ADD DUP4 SWAP1 MSTORE SWAP3 DUP2 SWAP1 SSTORE PUSH1 0x41 SSTORE PUSH1 0x42 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x43 SSTORE PUSH1 0x44 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x52C1 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x52DD JUMPI POP PUSH2 0x52DD PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x52EB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x5326 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5351 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x535A DUP3 PUSH2 0x5A9C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5364 PUSH2 0x58B2 JUMP JUMPDEST POP POP POP POP POP SWAP2 POP POP PUSH1 0x0 DUP2 GT PUSH2 0x53B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x37379039BA30B13632B1B7B4B7 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2710 MUL PUSH1 0x46 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE TIMESTAMP SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD DUP2 SWAP1 MSTORE PUSH1 0x47 DUP4 SWAP1 SSTORE PUSH1 0x48 SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x49 SSTORE PUSH1 0x4A SSTORE PUSH1 0x4B DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x546D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x21D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x54E3 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1F69565F DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5538 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x554C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x5575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1 PUSH1 0x20 SHL DUP3 GT ISZERO PUSH2 0x5594 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x55A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x55C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x55EF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x55D7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x561C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0xC0 SWAP1 SWAP6 ADD MLOAD SWAP8 SWAP15 POP SWAP3 SWAP13 POP SWAP1 SWAP11 POP SWAP9 POP SWAP7 POP SWAP5 POP SWAP2 SWAP3 POP POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP1 SWAP3 SWAP5 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x566E JUMPI POP PUSH1 0x0 PUSH2 0x1563 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x567B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x21D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CBD PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x570E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP2 PUSH2 0x5719 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x57D2 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP4 SWAP1 DUP4 DUP2 DUP2 DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x577B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5780 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x57CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1CD85999551C985B9CD9995C8819985A5B1959 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH2 0x4A82 JUMP JUMPDEST PUSH2 0x4A82 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP5 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x5B49 AND JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x582E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5C7B PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4ED8 DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x5A21 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5849 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE9CBD822 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5881 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5895 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x58AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x58C8 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3EFEC5E9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5914 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x593D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1 PUSH1 0x20 SHL DUP3 GT ISZERO PUSH2 0x595C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x598A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x59B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x599F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x59E4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0xC0 SWAP1 SWAP6 ADD MLOAD SWAP8 SWAP16 SWAP4 SWAP15 POP SWAP2 SWAP13 POP SWAP11 POP SWAP9 POP SWAP1 SWAP7 POP SWAP3 SWAP5 POP SWAP2 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5A2A DUP3 PUSH2 0x5A44 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x4ED8 JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0x5A5C SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x52C1 JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x5AB5 JUMPI POP PUSH2 0x5AB5 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x5AC3 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x5AFE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5B29 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP2 ISZERO PUSH2 0x4EC6 JUMPI PUSH1 0x45 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x4A82 SWAP1 DUP5 SWAP1 PUSH2 0x4BB1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x52C1 SWAP2 SWAP1 PUSH2 0x5C3C JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x5C0C JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x5C0C JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 CALLDATALOAD AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x5BD9 JUMP JUMPDEST POP PUSH2 0x5C18 SWAP3 SWAP2 POP PUSH2 0x5C56 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x4A82 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x4A82 SWAP2 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST PUSH2 0x121F SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x5C18 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH2 0x121F SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x5C18 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x5C5C JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D6174636873656E64657220 PUSH10 0x73206E6F74206120636F PUSH15 0x74726F6C6C65720000000000005361 PUSH7 0x654D6174683A20 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77436F6E747261637420 PUSH10 0x6E7374616E6365206861 PUSH20 0x20616C7265616479206265656E20696E69746961 PUSH13 0x697A65646F776E65722063616E PUSH15 0x6F742062652073657420746F207A65 PUSH19 0x6F20616464726573735361666545524332303A KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x7563636565646E6F6E2D6D61746368696E672070 PUSH6 0x6E64696E6720 PUSH24 0x686974656C69737420686173685361666545524332303A20 PUSH2 0x7070 PUSH19 0x6F76652066726F6D206E6F6E2D7A65726F2074 PUSH16 0x206E6F6E2D7A65726F20616C6C6F7761 PUSH15 0x6365A265627A7A723158200650F450 0xC2 0xD8 0xF8 0xFC PUSH22 0x477F70E683F64B5CC64733A3582CE80A54555FD95DD9 SUB PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "22334:17725:31:-;;;1311:82:25;;;-1:-1:-1;;;;;;1311:82:25;1350:42;1311:82;;;1162:66:24;1312:58;;1143:66:27;1304:67;;22334:17725:31;5:2:-1;;;;30:1;27;20:12;5:2;22334:17725:31;;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "6080604052600436106103a25760003560e01c80637fd004fa116101e7578063cc0e7e561161010d578063e61c51ca116100a0578063f41c43191161006f578063f41c431914611114578063f42176481461113e578063f776f518146111b9578063f8b2cb4f146111ce576103a2565b8063e61c51ca1461105d578063eadd3cea14611087578063f36febda146110b1578063f40b51f8146110ea576103a2565b8063d251fefc116100dc578063d251fefc14610ff4578063da84b1ed1461101e578063de212bf314611033578063e2b4ce9714611048576103a2565b8063cc0e7e5614610ef2578063cccdc55614610f07578063cd7958dd14610f1c578063ce0b5bd514610fca576103a2565b8063b221f31611610185578063be40ba7911610154578063be40ba7914610e5b578063beabacc814610e70578063c4856cd914610eb3578063cbd2ac6814610ec8576103a2565b8063b221f31614610da8578063b242e53414610dd2578063b87e21ef14610e0d578063bcb8b74a14610e46576103a2565b806390e690c7116101c157806390e690c714610cb85780639b0dfd2714610ccd578063aaf1fc6214610ce2578063ab20599314610d93576103a2565b80637fd004fa14610c13578063877337b014610c8e5780638da5cb5b14610ca3576103a2565b80633a43199f116102cc5780635d2362a81161026a57806374624c551161023957806374624c5514610b8e578063747c31d614610bb85780637d73b23114610bcd5780637d7d004614610bfe576103a2565b80635d2362a814610a8e5780636137d67014610aa357806369efdfc014610b1e578063715018a614610b79576103a2565b80633f579f42116102a65780633f579f42146108b757806346efe0ed1461097d57806347b55a9d14610a4f5780635adc02ab14610a64576103a2565b80633a43199f146108375780633bfec254146108635780633c672eb71461088d576103a2565b80631efd0299116103445780632587a6a2116103135780632587a6a21461077557806326d05ab21461078a578063294f40251461079f57806332531c3c14610804576103a2565b80631efd02991461065657806320c13b0b1461066b5780632121dc751461073657806321ce918d1461074b576103a2565b8063100f23fd11610380578063100f23fd146104425780631127b57e1461046c5780631626ba7e146104f65780631aa21fba146105cb576103a2565b806301ffc9a7146103a7578063027ef3eb146103ef5780630f3a85d814610416575b600080fd5b3480156103b357600080fd5b506103db600480360360208110156103ca57600080fd5b50356001600160e01b031916611201565b604080519115158252519081900360200190f35b3480156103fb57600080fd5b5061040461121b565b60408051918252519081900360200190f35b34801561042257600080fd5b506104406004803603602081101561043957600080fd5b5035611222565b005b34801561044e57600080fd5b506104406004803603602081101561046557600080fd5b503561132e565b34801561047857600080fd5b506104816114d3565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104bb5781810151838201526020016104a3565b50505050905090810190601f1680156104e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050257600080fd5b506105ae6004803603604081101561051957600080fd5b81359190810190604081016020820135600160201b81111561053a57600080fd5b82018360208201111561054c57600080fd5b803590602001918460018302840111600160201b8311171561056d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114f4945050505050565b604080516001600160e01b03199092168252519081900360200190f35b3480156105d757600080fd5b50610440600480360360408110156105ee57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561061857600080fd5b82018360208201111561062a57600080fd5b803590602001918460208302840111600160201b8311171561064b57600080fd5b509092509050611569565b34801561066257600080fd5b506104046116ee565b34801561067757600080fd5b506105ae6004803603604081101561068e57600080fd5b810190602081018135600160201b8111156106a857600080fd5b8201836020820111156106ba57600080fd5b803590602001918460018302840111600160201b831117156106db57600080fd5b919390929091602081019035600160201b8111156106f857600080fd5b82018360208201111561070a57600080fd5b803590602001918460018302840111600160201b8311171561072b57600080fd5b5090925090506116ff565b34801561074257600080fd5b506103db6117d4565b34801561075757600080fd5b506104406004803603602081101561076e57600080fd5b50356117e4565b34801561078157600080fd5b50610404611882565b34801561079657600080fd5b506103db611888565b3480156107ab57600080fd5b506107b4611891565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107f05781810151838201526020016107d8565b505050509050019250505060405180910390f35b34801561081057600080fd5b506103db6004803603602081101561082757600080fd5b50356001600160a01b03166118f3565b6104406004803603604081101561084d57600080fd5b506001600160a01b038135169060200135611908565b34801561086f57600080fd5b506104406004803603602081101561088657600080fd5b5035611b46565b34801561089957600080fd5b50610440600480360360208110156108b057600080fd5b5035611c3e565b3480156108c357600080fd5b50610481600480360360608110156108da57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460018302840111600160201b8311171561093c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ce4945050505050565b34801561098957600080fd5b50610440600480360360608110156109a057600080fd5b81359190810190604081016020820135600160201b8111156109c157600080fd5b8201836020820111156109d357600080fd5b803590602001918460018302840111600160201b831117156109f457600080fd5b919390929091602081019035600160201b811115610a1157600080fd5b820183602082011115610a2357600080fd5b803590602001918460018302840111600160201b83111715610a4457600080fd5b5090925090506121db565b348015610a5b57600080fd5b506107b461251c565b348015610a7057600080fd5b5061044060048036036020811015610a8757600080fd5b503561257c565b348015610a9a57600080fd5b5061040461284c565b348015610aaf57600080fd5b5061044060048036036020811015610ac657600080fd5b810190602081018135600160201b811115610ae057600080fd5b820183602082011115610af257600080fd5b803590602001918460208302840111600160201b83111715610b1357600080fd5b509092509050612858565b348015610b2a57600080fd5b50610440600480360360e0811015610b4157600080fd5b506001600160a01b03813581169160208101351515916040820135169060608101359060808101359060a08101359060c00135612a7e565b348015610b8557600080fd5b50610440612b62565b348015610b9a57600080fd5b5061044060048036036020811015610bb157600080fd5b5035612c60565b348015610bc457600080fd5b50610404612d64565b348015610bd957600080fd5b50610be2612d6a565b604080516001600160a01b039092168252519081900360200190f35b348015610c0a57600080fd5b50610404612d79565b348015610c1f57600080fd5b5061044060048036036020811015610c3657600080fd5b810190602081018135600160201b811115610c5057600080fd5b820183602082011115610c6257600080fd5b803590602001918460208302840111600160201b83111715610c8357600080fd5b509092509050612d85565b348015610c9a57600080fd5b506104046130c7565b348015610caf57600080fd5b50610be26130cd565b348015610cc457600080fd5b506104406130dc565b348015610cd957600080fd5b50610404613139565b348015610cee57600080fd5b5061044060048036036020811015610d0557600080fd5b810190602081018135600160201b811115610d1f57600080fd5b820183602082011115610d3157600080fd5b803590602001918460018302840111600160201b83111715610d5257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061313f945050505050565b348015610d9f57600080fd5b506103db613272565b348015610db457600080fd5b5061044060048036036020811015610dcb57600080fd5b503561327b565b348015610dde57600080fd5b5061044060048036036040811015610df557600080fd5b506001600160a01b038135169060200135151561336b565b348015610e1957600080fd5b5061040460048036036040811015610e3057600080fd5b506001600160a01b038135169060200135613525565b348015610e5257600080fd5b506103db6135b5565b348015610e6757600080fd5b506103db6135be565b348015610e7c57600080fd5b5061044060048036036060811015610e9357600080fd5b506001600160a01b038135811691602081013590911690604001356135cd565b348015610ebf57600080fd5b50610404613757565b348015610ed457600080fd5b5061044060048036036020811015610eeb57600080fd5b503561375d565b348015610efe57600080fd5b50610404613ada565b348015610f1357600080fd5b50610404613ae0565b348015610f2857600080fd5b5061040460048036036020811015610f3f57600080fd5b810190602081018135600160201b811115610f5957600080fd5b820183602082011115610f6b57600080fd5b803590602001918460208302840111600160201b83111715610f8c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613ae6945050505050565b348015610fd657600080fd5b5061044060048036036020811015610fed57600080fd5b5035613b40565b34801561100057600080fd5b50610be26004803603602081101561101757600080fd5b5035613ce9565b34801561102a57600080fd5b50610404613d10565b34801561103f57600080fd5b506103db613d16565b34801561105457600080fd5b50610404613d24565b34801561106957600080fd5b506104406004803603602081101561108057600080fd5b5035613d2a565b34801561109357600080fd5b50610440600480360360208110156110aa57600080fd5b5035613e74565b3480156110bd57600080fd5b50610404600480360360408110156110d457600080fd5b506001600160a01b038135169060200135613ecd565b3480156110f657600080fd5b506104406004803603602081101561110d57600080fd5b5035614080565b34801561112057600080fd5b506104406004803603602081101561113757600080fd5b50356140d9565b34801561114a57600080fd5b506104406004803603602081101561116157600080fd5b810190602081018135600160201b81111561117b57600080fd5b82018360208201111561118d57600080fd5b803590602001918460208302840111600160201b831117156111ae57600080fd5b509092509050614132565b3480156111c557600080fd5b506103db614484565b3480156111da57600080fd5b50610404600480360360208110156111f157600080fd5b50356001600160a01b031661448d565b6001600160e01b031981166301ffc9a760e01b145b919050565b603e545b90565b61122b33614498565b8061123557503330145b611279576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561129857506706f05b59d3b200008111155b6112df576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b6112f060408263ffffffff6144ac16565b604080513381526020810183905281517f41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e929181900390910190a150565b61133733614498565b80611346575061134633614515565b611390576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a5460ff166113df576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b611442603880548060200260200160405190810160405280929190818152602001828054801561143857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161141a575b5050505050613ae6565b811461147f5760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b61148b60386000615b9b565b603a805460ff19169055604080513381526020810183905281517f7794eff834d760583543e6e510e717a5e66d2c064e225f4db448343c3e66afcf929181900390910190a150565b60405180604001604052806005815260200164332e342e3160d81b81525081565b600080611507848463ffffffff6145a916565b905061151281614498565b611557576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b50630b135d3f60e11b90505b92915050565b61157233614498565b8061157c57503330145b6115c0576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b80611609576040805162461bcd60e51b8152602060048201526014602482015273617373657420617272617920697320656d70747960601b604482015290519081900360640190fd5b60005b8181101561166b57600061163a84848481811061162557fe5b905060200201356001600160a01b0316614697565b90506116628585858581811061164c57fe5b905060200201356001600160a01b0316836135cd565b5060010161160c565b507fd4f62f23021706247dcffea245d104ae7ddaec7f23acf3d11d7136d5de6a69ad83838360405180846001600160a01b03166001600160a01b03168152602001806020018281038252848482818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60006116fa6047614728565b905090565b6000808585604051602001808383808284376040805191909301818103601f190182528084528151602092830120601f8b01839004830282018301909452898152929650630b135d3f60e11b955061177694508693508991508890819084018382808284376000920191909152506114f492505050565b6001600160e01b031916146117c2576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b506320c13b0b60e01b95945050505050565b603554600160a01b900460ff1690565b6117ed33614498565b806117f757503330145b61183b576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61184c603b8263ffffffff61475d16565b6040805182815290517f4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da919181900360200190a150565b60405490565b603a5460ff1681565b606060398054806020026020016040519081016040528092919081815260200182805480156118e957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118cb575b5050505050905090565b60366020526000908152604090205460ff1681565b61191133614498565b8061191b57503330145b61195f576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b611968826147be565b6119ae576040805162461bcd60e51b8152602060048201526012602482015271746f6b656e206e6f74206c6f616461626c6560701b604482015290519081900360640190fd5b60006119ba8383613ecd565b90506119cd60478263ffffffff6147d816565b60006119da604d5461484e565b90506001600160a01b03841615611a8257611a056001600160a01b038516828563ffffffff61496f16565b806001600160a01b0316631b3c96b485856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a6557600080fd5b505af1158015611a79573d6000803e3d6000fd5b50505050611afc565b806001600160a01b0316631b3c96b48486866040518463ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001828152602001925050506000604051808303818588803b158015611ae257600080fd5b505af1158015611af6573d6000803e3d6000fd5b50505050505b604080516001600160a01b03861681526020810185905281517f5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a929181900390910190a150505050565b611b4f33614498565b80611b5957503330145b611b9d576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b604654811115611bef576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b611c0060478263ffffffff6144ac16565b604080513381526020810183905281517f0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef929181900390910190a150565b611c4733614498565b80611c5157503330145b611c95576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b611ca6603b8263ffffffff6144ac16565b604080513381526020810183905281517f068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21929181900390910190a150565b6060611cef33614498565b80611cf957503330145b611d3d576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6001600160a01b03841660009081526036602052604090205460ff16611d6e57611d6e603b8463ffffffff6147d816565b611d80846001600160a01b0316614a87565b8015611d905750611d9084614a8d565b15611f7757600080611da28685614aa7565b6001600160a01b038216600090815260366020526040902054919350915060ff16611de8576000611dd38783613525565b9050611de6603b8263ffffffff6147d816565b505b611e016001600160a01b0387168563ffffffff614bb116565b604080516020808252818301909252606091602082018180388339019050509050600160f81b81601f81518110611e3457fe5b60200101906001600160f81b031916908160001a9053507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138787878460405180856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ecf578181015183820152602001611eb7565b50505050905090810190601f168015611efc5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f2f578181015183820152602001611f17565b50505050905090810190601f168015611f5c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a192506121d4915050565b60006060856001600160a01b031685856040518082805190602001908083835b60208310611fb65780518252601f199092019160209182019101611f97565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612018576040519150601f19603f3d011682016040523d82523d6000602084013e61201d565b606091505b50915091508181906120ad5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561207257818101518382015260200161205a565b50505050905090810190601f16801561209f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138686868460405180856001600160a01b03166001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561213257818101518382015260200161211a565b50505050905090810190601f16801561215f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561219257818101518382015260200161217a565b50505050905090810190601f1680156121bf5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a19150505b9392505050565b6121e433614515565b612223576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b600046905060006122a3823089898960405160200180806836b7b737b634ba341d60b91b815250600901868152602001856001600160a01b03166001600160a01b031660601b8152601401848152602001838380828437808301925050509550505050505060405160208183030381529060405280519060200120614d6f565b9050631626ba7e60e01b6001600160e01b0319166122f78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114f492505050565b6001600160e01b03191614612343576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b604c548714612385576040805162461bcd60e51b81526020600482015260096024820152687478207265706c617960b81b604482015290519081900360640190fd5b61238d614dc0565b60006060306001600160a01b03168888604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146123ed576040519150601f19603f3d011682016040523d82523d6000602084013e6123f2565b606091505b50915091508181906124455760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207257818101518382015260200161205a565b507f823dbcf2b7b0f265871963ca65ac033f6b4c71e0d82cd123d2ff23d752dc21c188888360405180806020018060200183810383528686828181526020019250808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b838110156124d45781810151838201526020016124bc565b50505050905090810190601f1680156125015780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050505050565b606060388054806020026020016040519081016040528092919081815260200182805480156118e9576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116118cb575050505050905090565b61258533614515565b6125c4576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b603a5460ff16612613576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6126746038805480602002602001604051908101604052809291908181526020018280548015611438576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141a575050505050613ae6565b81146126b15760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b60005b6038548110156127985760366000603883815481106126cf57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16612790576001603660006038848154811061270e57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905560388054603791908390811061275457fe5b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b6001016126b4565b507fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a33603860405180836001600160a01b03166001600160a01b0316815260200180602001828103825283818154815260200191508054801561282457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612806575b5050935050505060405180910390a161283f60386000615b9b565b50603a805460ff19169055565b60006116fa603b614728565b61286133614498565b8061286b57503330145b6128af576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff161580156128ca5750603a54610100900460ff16155b61291b576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b603a5462010000900460ff16612974576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b806129b8576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b6129c460398383615bb9565b50603a805461ff00191661010017905560408051602080840282810182019093528382527ffbc0e5ca6c7e4858daf0fdb185ef5186203e74ec9c64737e93c0aeaec596e1d19285928592612a3392859185918291850190849080828437600092019190915250613ae692505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b600054610100900460ff1680612a975750612a97614e08565b80612aa5575060005460ff16155b612ae05760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015612b0b576000805460ff1961ff0019909116610100171660011790555b612b1486614e0e565b612b1d84614edc565b612b278888614f89565b612b30826150e8565b612b386151d3565b612b41856152c4565b604d8390558015612b58576000805461ff00191690555b5050505050505050565b612b6b33614498565b612bb5576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16612c13576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b612c6933614498565b80612c7357503330145b612cb7576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c6800011158015612cd657506706f05b59d3b200008111155b612d1d576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b612d2e60408263ffffffff61475d16565b6040805182815290517faf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c9181900360200190a150565b604d5490565b6033546001600160a01b031690565b60006116fa6040614728565b612d8e33614498565b80612d9857503330145b612ddc576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015612df75750603a54610100900460ff16155b612e48576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015612f6457612ea1828281518110612e9457fe5b6020026020010151614498565b15612eec576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110612f0357fe5b60200260200101516001600160a01b03161415612f5c576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101612e7c565b50603a5462010000900460ff16612fbe576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b81613002576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b61300e60388484615bb9565b50603a805460ff1916600117905560408051602080850282810182019093528482527f9c80b3b5f68b3e017766d59e8d09b34efe6462b05c398f35cab9e271d9bc3b9c928692869261307b92859185918291850190849080828437600092019190915250613ae692505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60455490565b6035546001600160a01b031690565b6130e533614498565b61312f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b613137614dc0565b565b603b5490565b61314833614498565b8061315257503330145b613196576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8051602080820191906000808060605b86851015612b58576131bf86605463ffffffff61541616565b888601805160148201516034909201805193995060609190911c9650909450909250905061320460546131f8878563ffffffff61547316565b9063ffffffff61547316565b94508685111561324b576040805162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b604482015290519081900360640190fd5b8161326157506040805160208101909152600081525b61326c848483611ce4565b506131a6565b604b5460ff1690565b61328433614498565b8061328e57503330145b6132d2576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b604654811115613324576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b61333560478263ffffffff61475d16565b6040805182815290517fc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d109181900360200190a150565b61337433614498565b6133be576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff1661341c576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166134615760405162461bcd60e51b8152600401808060200182810382526023815260200180615d0c6023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b83151502179055806134ba57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080613534866154cd565b5050509350935093505080156135a9578161357f576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b61359f83613593878563ffffffff61565f16565b9063ffffffff6156b816565b9350505050611563565b50600095945050505050565b603f5460ff1690565b603a5462010000900460ff1681565b6135d633614498565b806135e057503330145b613624576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8080613661576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b6001600160a01b0384166136ac576040805162461bcd60e51b815260206004820152600d60248201526c064657374696e6174696f6e3d3609c1b604482015290519081900360640190fd5b6001600160a01b03841660009081526036602052604090205460ff166136fc57816001600160a01b038416156136e9576136e68484613525565b90505b6136fa603b8263ffffffff6147d816565b505b613707848484615722565b604080516001600160a01b0380871682528516602082015280820184905290517fd1ba4ac2e2a11b5101f6cb4d978f514a155b421e8ec396d2d9abaf0bb02917ee9181900360600190a150505050565b604a5490565b61376633614515565b6137a5576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b603a54610100900460ff166137f9576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61385a6039805480602002602001604051908101604052809291908181526020018280548015611438576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141a575050505050613ae6565b81146138975760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b60005b603954811015613a255760366000603983815481106138b557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615613a1d57600060366000603984815481106138f557fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091555b60375461393f90600163ffffffff61541616565b811015613a07576039828154811061395357fe5b600091825260209091200154603780546001600160a01b03909216918390811061397957fe5b6000918252602090912001546001600160a01b031614156139ff576037805460001981019081106139a657fe5b600091825260209091200154603780546001600160a01b0390921691839081106139cc57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613a07565b60010161392b565b506037805490613a1b906000198301615c1c565b505b60010161389a565b507fd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b33603960405180836001600160a01b03166001600160a01b03168152602001806020018281038252838181548152602001915080548015613ab157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613a93575b5050935050505060405180910390a1613acc60396000615b9b565b50603a805461ff0019169055565b60435490565b604c5481565b60008160405160200180828051906020019060200280838360005b83811015613b19578181015183820152602001613b01565b50505050905001915050604051602081830303815290604052805190602001209050919050565b613b4933614498565b80613b585750613b5833614515565b613ba2576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a54610100900460ff16613bf6576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b613c576039805480602002602001604051908101604052809291908181526020018280548015611438576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141a575050505050613ae6565b8114613c945760405162461bcd60e51b8152600401808060200182810382526023815260200180615d596023913960400191505060405180910390fd5b613ca060396000615b9b565b603a805461ff0019169055604080513381526020810183905281517f13c935eb475aa0f6e931fece83e2ac44569ce2d53460d29a6dedab40b965c8a3929181900390910190a150565b60378181548110613cf657fe5b6000918252602090912001546001600160a01b0316905081565b60475490565b603a54610100900460ff1681565b60345490565b8080613d67576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b613d7033614498565b80613d7f5750613d7f33614515565b613dc9576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b613dda60408363ffffffff6147d816565b613de26130cd565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015613e1a573d6000803e3d6000fd5b507f611b7c0d84fda988026215bef9b3e4d81cbceced7e679be6d5e044b588467c0e33613e456130cd565b604080516001600160a01b03938416815291909216602082015280820185905290519081900360600190a15050565b613e7d33614515565b613ebc576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b611ca6603b8263ffffffff6157ec16565b6000613ed761583c565b6001600160a01b0316836001600160a01b03161415613ef7575080611563565b816001600160a01b03841615613fbc576000806000613f15876154cd565b5050509350935093505080613f67576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b81613fa2576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b613fb683613593888563ffffffff61565f16565b93505050505b6000806000613fc96158b2565b505050935093509350508061401b576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b81614061576040805162461bcd60e51b81526020600482015260116024820152700737461626c65636f696e20726174653d3607c1b604482015290519081900360640190fd5b61407582613593868663ffffffff61565f16565b979650505050505050565b61408933614515565b6140c8576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b611c0060478263ffffffff6157ec16565b6140e233614515565b614121576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c9d833981519152604482015290519081900360640190fd5b6112f060408263ffffffff6157ec16565b61413b33614498565b8061414557503330145b614189576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015614298576141d5828281518110612e9457fe5b15614220576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b031682828151811061423757fe5b60200260200101516001600160a01b03161415614290576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b6001016141bd565b50603a5462010000900460ff16156142ef576040805162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081a5b9a5d1a585b1a5e9959605a1b604482015290519081900360640190fd5b60005b828110156143e0576036600085858481811061430a57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff166143d85760016036600086868581811061434657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550603784848381811061439b57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055505b6001016142f2565b50603a805462ff0000191662010000179055604080513380825260208201838152603780549484018590527fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a949293909290919060608301908490801561447057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614452575b5050935050505060405180910390a1505050565b60445460ff1690565b600061156382614697565b6035546001600160a01b0390811691161490565b600482015460ff16156144fa576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6145048282615a21565b50600401805460ff19166001179055565b600061452260345461484e565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561457757600080fd5b505afa15801561458b573d6000803e3d6000fd5b505050506040513d60208110156145a157600080fd5b505192915050565b600081516041146145bc57506000611563565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156146025760009350505050611563565b8060ff16601b1415801561461a57508060ff16601c14155b1561462b5760009350505050611563565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015614682573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0382161561472157604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156146ee57600080fd5b505afa158015614702573d6000803e3d6000fd5b505050506040513d602081101561471857600080fd5b50519050611216565b5047611216565b6002810154600090614743906201518063ffffffff61547316565b42111561475257508054611216565b506001810154611216565b600482015460ff166147b6576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b6000806147ca836154cd565b509098975050505050505050565b6147e182615a44565b808260010154101561482d576040805162461bcd60e51b815260206004820152601060248201526f185d985a5b18589b194f185b5bdd5b9d60821b604482015290519081900360640190fd5b6001820154614842908263ffffffff61541616565b82600101819055505050565b6033546000906001600160a01b03166148ae576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156148fa57600080fd5b505afa15801561490e573d6000803e3d6000fd5b505050506040513d602081101561492457600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561457757600080fd5b8015806149f5575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156149c757600080fd5b505afa1580156149db573d6000803e3d6000fd5b505050506040513d60208110156149f157600080fd5b5051155b614a305760405162461bcd60e51b8152600401808060200182810382526036815260200180615d7c6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052614a82908490614bb1565b505050565b3b151590565b600080614a99836154cd565b509198975050505050505050565b600080614ab560455461484e565b6001600160a01b031663afc72e9385856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b29578181015183820152602001614b11565b50505050905090810190601f168015614b565780820380516001836020036101000a031916815260200191505b509350505050604080518083038186803b158015614b7357600080fd5b505afa158015614b87573d6000803e3d6000fd5b505050506040513d6040811015614b9d57600080fd5b508051602090910151909590945092505050565b614bc3826001600160a01b0316614a87565b614c14576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310614c525780518252601f199092019160209182019101614c33565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614cb4576040519150601f19603f3d011682016040523d82523d6000602084013e614cb9565b606091505b509150915081614d10576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115614d6957808060200190516020811015614d2c57600080fd5b5051614d695760405162461bcd60e51b815260040180806020018281038252602a815260200180615d2f602a913960400191505060405180910390fd5b50505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b604c80546001019081905560408051338152602081019290925280517fab0423a75986556234aecd171c46ce7f5e45607d8070bf5230f2735b50322bff9281900390910190a1565b303b1590565b600054610100900460ff1680614e275750614e27614e08565b80614e35575060005460ff16155b614e705760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015614e9b576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615614ec657603380546001600160a01b0319166001600160a01b0384161790555b8015614ed8576000805461ff00191690555b5050565b600054610100900460ff1680614ef55750614ef5614e08565b80614f03575060005460ff16155b614f3e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015614f69576000805460ff1961ff0019909116610100171660011790555b8115614ec65760348290558015614ed8576000805461ff00191690555050565b600054610100900460ff1680614fa25750614fa2614e08565b80614fb0575060005460ff16155b614feb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615016576000805460ff1961ff0019909116610100171660011790555b603580546001600160a01b0319166001600160a01b0385161760ff60a01b1916600160a01b8415158102919091179182905560ff91041661508e57604080516001600160a01b038516815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b60408051600081526001600160a01b038516602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a18015614a82576000805461ff0019169055505050565b600054610100900460ff16806151015750615101614e08565b8061510f575060005460ff16155b61514a5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615175576000805460ff1961ff0019909116610100171660011790555b6040805160a08101825283815260208101849052429181018290526000606082018190526080909101819052603b849055603c849055603d91909155603e55603f805460ff191690558015614ed8576000805461ff00191690555050565b600054610100900460ff16806151ec57506151ec614e08565b806151fa575060005460ff16155b6152355760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615260576000805460ff1961ff0019909116610100171660011790555b6040805160a0810182526706f05b59d3b2000080825260208201819052428284018190526000606084018190526080909301839052928190556041556042919091556043556044805460ff1916905580156152c1576000805461ff00191690555b50565b600054610100900460ff16806152dd57506152dd614e08565b806152eb575060005460ff16155b6153265760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615351576000805460ff1961ff0019909116610100171660011790555b61535a82615a9c565b60006153646158b2565b5050505050915050600081116153b1576040805162461bcd60e51b815260206004820152600d60248201526c37379039ba30b13632b1b7b4b760991b604482015290519081900360640190fd5b6127100260468190556040805160a081018252828152602081018390524291810182905260006060820181905260809091018190526047839055604892909255604955604a55604b805460ff191690558015614ed8576000805461ff00191690555050565b60008282111561546d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000828201838110156121d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60606000806000806000806154e360455461484e565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060006040518083038186803b15801561553857600080fd5b505afa15801561554c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561557557600080fd5b8101908080516040519392919084600160201b82111561559457600080fd5b9083019060208201858111156155a957600080fd5b8251600160201b8111828201881017156155c257600080fd5b82525081516020918201929091019080838360005b838110156155ef5781810151838201526020016155d7565b50505050905090810190601f16801561561c5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b60008261566e57506000611563565b8282028284828161567b57fe5b04146121d45760405162461bcd60e51b8152600401808060200182810382526021815260200180615cbd6021913960400191505060405180910390fd5b600080821161570e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161571957fe5b04949350505050565b6001600160a01b0382166157d2576040516000906001600160a01b0385169083908381818185875af1925050503d806000811461577b576040519150601f19603f3d011682016040523d82523d6000602084013e615780565b606091505b50509050806157cc576040805162461bcd60e51b81526020600482015260136024820152721cd85999551c985b9cd9995c8819985a5b1959606a1b604482015290519081900360640190fd5b50614a82565b614a826001600160a01b038316848363ffffffff615b4916565b8082600301541461582e5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c7b6022913960400191505060405180910390fd5b614ed8828360030154615a21565b600061584960455461484e565b6001600160a01b031663e9cbd8226040518163ffffffff1660e01b815260040160206040518083038186803b15801561588157600080fd5b505afa158015615895573d6000803e3d6000fd5b505050506040513d60208110156158ab57600080fd5b5051905090565b60606000806000806000806158c860455461484e565b6001600160a01b0316633efec5e96040518163ffffffff1660e01b815260040160006040518083038186803b15801561590057600080fd5b505afa158015615914573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561593d57600080fd5b8101908080516040519392919084600160201b82111561595c57600080fd5b90830190602082018581111561597157600080fd5b8251600160201b81118282018810171561598a57600080fd5b82525081516020918201929091019080838360005b838110156159b757818101518382015260200161599f565b50505050905090810190601f1680156159e45780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979f939e50919c509a5098509096509294509192505050565b615a2a82615a44565b8082556001820154811015614ed857815460018301555050565b6002810154615a5c906201518063ffffffff61547316565b4211156152c157426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a150565b600054610100900460ff1680615ab55750615ab5614e08565b80615ac3575060005460ff16155b615afe5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cde602e913960400191505060405180910390fd5b600054610100900460ff16158015615b29576000805460ff1961ff0019909116610100171660011790555b8115614ec65760458290558015614ed8576000805461ff00191690555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052614a82908490614bb1565b50805460008255906000526020600020908101906152c19190615c3c565b828054828255906000526020600020908101928215615c0c579160200282015b82811115615c0c5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190615bd9565b50615c18929150615c56565b5090565b815481835581811115614a8257600083815260209020614a829181019083015b61121f91905b80821115615c185760008155600101615c42565b61121f91905b80821115615c185780546001600160a01b0319168155600101615c5c56fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d6174636873656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65646f776e65722063616e6e6f742062652073657420746f207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646e6f6e2d6d61746368696e672070656e64696e672077686974656c69737420686173685361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158200650f450c2d8f8fc75477f70e683f64b5cc64733a3582ce80a54555fd95dd90364736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3A2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7FD004FA GT PUSH2 0x1E7 JUMPI DUP1 PUSH4 0xCC0E7E56 GT PUSH2 0x10D JUMPI DUP1 PUSH4 0xE61C51CA GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xF41C4319 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xF41C4319 EQ PUSH2 0x1114 JUMPI DUP1 PUSH4 0xF4217648 EQ PUSH2 0x113E JUMPI DUP1 PUSH4 0xF776F518 EQ PUSH2 0x11B9 JUMPI DUP1 PUSH4 0xF8B2CB4F EQ PUSH2 0x11CE JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xE61C51CA EQ PUSH2 0x105D JUMPI DUP1 PUSH4 0xEADD3CEA EQ PUSH2 0x1087 JUMPI DUP1 PUSH4 0xF36FEBDA EQ PUSH2 0x10B1 JUMPI DUP1 PUSH4 0xF40B51F8 EQ PUSH2 0x10EA JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xD251FEFC GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD251FEFC EQ PUSH2 0xFF4 JUMPI DUP1 PUSH4 0xDA84B1ED EQ PUSH2 0x101E JUMPI DUP1 PUSH4 0xDE212BF3 EQ PUSH2 0x1033 JUMPI DUP1 PUSH4 0xE2B4CE97 EQ PUSH2 0x1048 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xCC0E7E56 EQ PUSH2 0xEF2 JUMPI DUP1 PUSH4 0xCCCDC556 EQ PUSH2 0xF07 JUMPI DUP1 PUSH4 0xCD7958DD EQ PUSH2 0xF1C JUMPI DUP1 PUSH4 0xCE0B5BD5 EQ PUSH2 0xFCA JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xB221F316 GT PUSH2 0x185 JUMPI DUP1 PUSH4 0xBE40BA79 GT PUSH2 0x154 JUMPI DUP1 PUSH4 0xBE40BA79 EQ PUSH2 0xE5B JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xE70 JUMPI DUP1 PUSH4 0xC4856CD9 EQ PUSH2 0xEB3 JUMPI DUP1 PUSH4 0xCBD2AC68 EQ PUSH2 0xEC8 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0xB221F316 EQ PUSH2 0xDA8 JUMPI DUP1 PUSH4 0xB242E534 EQ PUSH2 0xDD2 JUMPI DUP1 PUSH4 0xB87E21EF EQ PUSH2 0xE0D JUMPI DUP1 PUSH4 0xBCB8B74A EQ PUSH2 0xE46 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x90E690C7 GT PUSH2 0x1C1 JUMPI DUP1 PUSH4 0x90E690C7 EQ PUSH2 0xCB8 JUMPI DUP1 PUSH4 0x9B0DFD27 EQ PUSH2 0xCCD JUMPI DUP1 PUSH4 0xAAF1FC62 EQ PUSH2 0xCE2 JUMPI DUP1 PUSH4 0xAB205993 EQ PUSH2 0xD93 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x7FD004FA EQ PUSH2 0xC13 JUMPI DUP1 PUSH4 0x877337B0 EQ PUSH2 0xC8E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xCA3 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x3A43199F GT PUSH2 0x2CC JUMPI DUP1 PUSH4 0x5D2362A8 GT PUSH2 0x26A JUMPI DUP1 PUSH4 0x74624C55 GT PUSH2 0x239 JUMPI DUP1 PUSH4 0x74624C55 EQ PUSH2 0xB8E JUMPI DUP1 PUSH4 0x747C31D6 EQ PUSH2 0xBB8 JUMPI DUP1 PUSH4 0x7D73B231 EQ PUSH2 0xBCD JUMPI DUP1 PUSH4 0x7D7D0046 EQ PUSH2 0xBFE JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x5D2362A8 EQ PUSH2 0xA8E JUMPI DUP1 PUSH4 0x6137D670 EQ PUSH2 0xAA3 JUMPI DUP1 PUSH4 0x69EFDFC0 EQ PUSH2 0xB1E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB79 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x3F579F42 GT PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x3F579F42 EQ PUSH2 0x8B7 JUMPI DUP1 PUSH4 0x46EFE0ED EQ PUSH2 0x97D JUMPI DUP1 PUSH4 0x47B55A9D EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0x5ADC02AB EQ PUSH2 0xA64 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x3A43199F EQ PUSH2 0x837 JUMPI DUP1 PUSH4 0x3BFEC254 EQ PUSH2 0x863 JUMPI DUP1 PUSH4 0x3C672EB7 EQ PUSH2 0x88D JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x1EFD0299 GT PUSH2 0x344 JUMPI DUP1 PUSH4 0x2587A6A2 GT PUSH2 0x313 JUMPI DUP1 PUSH4 0x2587A6A2 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x26D05AB2 EQ PUSH2 0x78A JUMPI DUP1 PUSH4 0x294F4025 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0x32531C3C EQ PUSH2 0x804 JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x1EFD0299 EQ PUSH2 0x656 JUMPI DUP1 PUSH4 0x20C13B0B EQ PUSH2 0x66B JUMPI DUP1 PUSH4 0x2121DC75 EQ PUSH2 0x736 JUMPI DUP1 PUSH4 0x21CE918D EQ PUSH2 0x74B JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x100F23FD GT PUSH2 0x380 JUMPI DUP1 PUSH4 0x100F23FD EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0x1127B57E EQ PUSH2 0x46C JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x1AA21FBA EQ PUSH2 0x5CB JUMPI PUSH2 0x3A2 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x3A7 JUMPI DUP1 PUSH4 0x27EF3EB EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0xF3A85D8 EQ PUSH2 0x416 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH2 0x1201 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x439 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1222 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x132E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x481 PUSH2 0x14D3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4BB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4A3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4E8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x54C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x14F4 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x64B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1569 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x662 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x16EE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x677 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x68E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x6A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x6DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x6F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x16FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x742 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x17D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x757 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x17E4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x1882 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x796 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x1888 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B4 PUSH2 0x1891 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x7F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7D8 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x810 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x827 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x18F3 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x84D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1908 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x886 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1B46 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x899 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C3E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x481 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x8DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x91B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1CE4 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x9A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x9C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x9D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x9F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x20 DUP2 ADD SWAP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xA11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xA23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xA44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x21DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B4 PUSH2 0x251C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x257C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x284C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xAE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xAF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xB13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2858 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD ISZERO ISZERO SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x2A7E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH2 0x2B62 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2C60 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x2D64 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE2 PUSH2 0x2D6A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x2D79 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xC50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xC62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xC83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2D85 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x30C7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE2 PUSH2 0x30CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH2 0x30DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3139 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xD1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xD52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x313F SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x3272 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x327B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xDF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x336B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xE30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3525 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x35B5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x35BE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xE93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x35CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3757 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x375D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3ADA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3AE0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0xF59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0xF8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x3AE6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xFED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3B40 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBE2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1017 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3CE9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3D10 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x103F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x3D16 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1054 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3D24 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1069 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1080 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3D2A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1093 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x10AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x3E74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3ECD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x110D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x4080 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x40D9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x114A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT ISZERO PUSH2 0x117B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x118D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH1 0x1 PUSH1 0x20 SHL DUP4 GT OR ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x4132 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DB PUSH2 0x4484 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x448D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3E SLOAD JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x122B CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1235 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1279 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x1298 JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x12DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12F0 PUSH1 0x40 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x44AC AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x41FF5D5CE3B7935893A4E7269EC5CAAE9CCA5E3BF0EB4B21D2F443489667112E SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x1337 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1346 JUMPI POP PUSH2 0x1346 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x1390 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x13DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1442 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x147F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x148B PUSH1 0x38 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x7794EFF834D760583543E6E510E717A5E66D2C064E225F4DB448343C3E66AFCF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH5 0x332E342E31 PUSH1 0xD8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1507 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x45A9 AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1512 DUP2 PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x1557 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x696E76616C6964207369676E6174757265 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH4 0xB135D3F PUSH1 0xE1 SHL SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1572 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x157C JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x15C0 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x1609 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x617373657420617272617920697320656D707479 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x166B JUMPI PUSH1 0x0 PUSH2 0x163A DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x1625 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4697 JUMP JUMPDEST SWAP1 POP PUSH2 0x1662 DUP6 DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x164C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH2 0x35CD JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x160C JUMP JUMPDEST POP PUSH32 0xD4F62F23021706247DCFFEA245D104AE7DDAEC7F23ACF3D11D7136D5DE6A69AD DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16FA PUSH1 0x47 PUSH2 0x4728 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP1 SWAP4 ADD DUP2 DUP2 SUB PUSH1 0x1F NOT ADD DUP3 MSTORE DUP1 DUP5 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x1F DUP12 ADD DUP4 SWAP1 DIV DUP4 MUL DUP3 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP10 DUP2 MSTORE SWAP3 SWAP7 POP PUSH4 0xB135D3F PUSH1 0xE1 SHL SWAP6 POP PUSH2 0x1776 SWAP5 POP DUP7 SWAP4 POP DUP10 SWAP2 POP DUP9 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x14F4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0x17C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x1CDA59C81B9BDD081D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH4 0x20C13B0B PUSH1 0xE0 SHL SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x17ED CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x17F7 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x183B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x184C PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x475D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x4B1B970C8A0FA761E7803ED70C13D7ACA71904B13DF60FBE03F981DA1730DA91 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x18E9 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x18CB JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1911 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x191B JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x195F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1968 DUP3 PUSH2 0x47BE JUMP JUMPDEST PUSH2 0x19AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x746F6B656E206E6F74206C6F616461626C65 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x19BA DUP4 DUP4 PUSH2 0x3ECD JUMP JUMPDEST SWAP1 POP PUSH2 0x19CD PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DA PUSH1 0x4D SLOAD PUSH2 0x484E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x1A82 JUMPI PUSH2 0x1A05 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x496F AND JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1B3C96B4 DUP6 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A79 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1AFC JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1B3C96B4 DUP5 DUP7 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x5F65674BEC9AF81F71BE68674135A0EA3F163FB91984E3893D06DA9F6EA2CE8A SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x1B4F CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1B59 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1B9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x46 SLOAD DUP2 GT ISZERO PUSH2 0x1BEF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1C00 PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x44AC AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0xB05243483E17C3F3377AEE82B7D47E5700B48288695FC08B7ECC2759AFA44EF SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x1C47 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1C51 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1C95 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1CA6 PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x44AC AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x68F112E5EC923D412BE64779FE69E0FCBB6784C6617E94CCCC8FD348F2E0F21 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1CEF CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x1CF9 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x1D3D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1D6E JUMPI PUSH2 0x1D6E PUSH1 0x3B DUP5 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST PUSH2 0x1D80 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A87 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1D90 JUMPI POP PUSH2 0x1D90 DUP5 PUSH2 0x4A8D JUMP JUMPDEST ISZERO PUSH2 0x1F77 JUMPI PUSH1 0x0 DUP1 PUSH2 0x1DA2 DUP7 DUP6 PUSH2 0x4AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP4 POP SWAP2 POP PUSH1 0xFF AND PUSH2 0x1DE8 JUMPI PUSH1 0x0 PUSH2 0x1DD3 DUP8 DUP4 PUSH2 0x3525 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DE6 PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST POP JUMPDEST PUSH2 0x1E01 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP6 PUSH4 0xFFFFFFFF PUSH2 0x4BB1 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CODESIZE DUP4 CODECOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x1 PUSH1 0xF8 SHL DUP2 PUSH1 0x1F DUP2 MLOAD DUP2 LT PUSH2 0x1E34 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0xF77753FAB406ECFFF96D6FF2476C64A838FA9F6D37B1BF190F8546E395E3B613 DUP8 DUP8 DUP8 DUP5 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1ECF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EB7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1EFC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F2F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F17 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1F5C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP3 POP PUSH2 0x21D4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1FB6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1F97 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2018 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x201D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x20AD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2072 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x205A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x209F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH32 0xF77753FAB406ECFFF96D6FF2476C64A838FA9F6D37B1BF190F8546E395E3B613 DUP7 DUP7 DUP7 DUP5 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2132 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x211A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x215F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2192 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x217A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x21BF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x21E4 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x2223 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP PUSH1 0x0 PUSH2 0x22A3 DUP3 ADDRESS DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH9 0x36B7B737B634BA341D PUSH1 0xB9 SHL DUP2 MSTORE POP PUSH1 0x9 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE PUSH1 0x14 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY DUP1 DUP4 ADD SWAP3 POP POP POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x4D6F JUMP JUMPDEST SWAP1 POP PUSH4 0x1626BA7E PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH2 0x22F7 DUP3 DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x14F4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ PUSH2 0x2343 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x1CDA59C81B9BDD081D985B1A59 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x4C SLOAD DUP8 EQ PUSH2 0x2385 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x7478207265706C6179 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x238D PUSH2 0x4DC0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 DUP9 PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP4 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23ED JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x23F2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x2445 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x2072 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x205A JUMP JUMPDEST POP PUSH32 0x823DBCF2B7B0F265871963CA65AC033F6B4C71E0D82CD123D2FF23D752DC21C1 DUP9 DUP9 DUP4 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP7 DUP7 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP6 DUP2 SUB DUP5 MSTORE DUP7 MLOAD DUP2 MSTORE DUP7 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP4 SWAP2 DUP9 ADD SWAP3 POP SWAP1 DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x24D4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24BC JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2501 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x18E9 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x18CB JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2585 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x25C4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND PUSH2 0x2613 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2674 PUSH1 0x38 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x26B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x38 SLOAD DUP2 LT ISZERO PUSH2 0x2798 JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x26CF JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2790 JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 PUSH1 0x38 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x270E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x38 DUP1 SLOAD PUSH1 0x37 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x2754 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE SWAP4 DUP4 MSTORE SWAP2 KECCAK256 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 ADD PUSH2 0x26B4 JUMP JUMPDEST POP PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A CALLER PUSH1 0x38 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x2824 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2806 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x283F PUSH1 0x38 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16FA PUSH1 0x3B PUSH2 0x4728 JUMP JUMPDEST PUSH2 0x2861 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x286B JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x28AF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x28CA JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x291B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2974 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x29B8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x29C4 PUSH1 0x39 DUP4 DUP4 PUSH2 0x5BB9 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP4 DUP3 MSTORE PUSH32 0xFBC0E5CA6C7E4858DAF0FDB185EF5186203E74EC9C64737E93C0AEAEC596E1D1 SWAP3 DUP6 SWAP3 DUP6 SWAP3 PUSH2 0x2A33 SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x3AE6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x2A97 JUMPI POP PUSH2 0x2A97 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x2AA5 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2AE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2B0B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x2B14 DUP7 PUSH2 0x4E0E JUMP JUMPDEST PUSH2 0x2B1D DUP5 PUSH2 0x4EDC JUMP JUMPDEST PUSH2 0x2B27 DUP9 DUP9 PUSH2 0x4F89 JUMP JUMPDEST PUSH2 0x2B30 DUP3 PUSH2 0x50E8 JUMP JUMPDEST PUSH2 0x2B38 PUSH2 0x51D3 JUMP JUMPDEST PUSH2 0x2B41 DUP6 PUSH2 0x52C4 JUMP JUMPDEST PUSH1 0x4D DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2B58 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2B6B CALLER PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x2BB5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2C13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x2C69 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x2C73 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x2CB7 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH7 0x38D7EA4C68000 GT ISZERO DUP1 ISZERO PUSH2 0x2CD6 JUMPI POP PUSH8 0x6F05B59D3B20000 DUP2 GT ISZERO JUMPDEST PUSH2 0x2D1D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6F7574206F662072616E676520746F702D757 PUSH1 0x6C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2D2E PUSH1 0x40 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x475D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xAF2A77CD04C3CC155588DD3BF67B310AB4FB3B1DA3CF6B8D7D4D2AA1D09B794C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x4D SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16FA PUSH1 0x40 PUSH2 0x4728 JUMP JUMPDEST PUSH2 0x2D8E CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x2D98 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x2DDC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2DF7 JUMPI POP PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x2E48 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x77686974656C6973742073756D62697373696F6E2070656E64696E6700000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x2F64 JUMPI PUSH2 0x2EA1 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E94 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4498 JUMP JUMPDEST ISZERO PUSH2 0x2EEC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2F03 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2F5C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x2E7C JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2FBE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH25 0x1DDA1A5D195B1A5CDD081B9BDD081A5B9A5D1A585B1A5E9959 PUSH1 0x3A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x3002 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x195B5C1D1E481DDA1A5D195B1A5CDD PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x300E PUSH1 0x38 DUP5 DUP5 PUSH2 0x5BB9 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP6 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP5 DUP3 MSTORE PUSH32 0x9C80B3B5F68B3E017766D59E8D09B34EFE6462B05C398F35CAB9E271D9BC3B9C SWAP3 DUP7 SWAP3 DUP7 SWAP3 PUSH2 0x307B SWAP3 DUP6 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x3AE6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP6 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x45 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x30E5 CALLER PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x312F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3137 PUSH2 0x4DC0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3148 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x3152 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x3196 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 DUP1 DUP1 PUSH1 0x60 JUMPDEST DUP7 DUP6 LT ISZERO PUSH2 0x2B58 JUMPI PUSH2 0x31BF DUP7 PUSH1 0x54 PUSH4 0xFFFFFFFF PUSH2 0x5416 AND JUMP JUMPDEST DUP9 DUP7 ADD DUP1 MLOAD PUSH1 0x14 DUP3 ADD MLOAD PUSH1 0x34 SWAP1 SWAP3 ADD DUP1 MLOAD SWAP4 SWAP10 POP PUSH1 0x60 SWAP2 SWAP1 SWAP2 SHR SWAP7 POP SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x3204 PUSH1 0x54 PUSH2 0x31F8 DUP8 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST SWAP5 POP DUP7 DUP6 GT ISZERO PUSH2 0x324B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x6F7574206F6620626F756E6473 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x3261 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE JUMPDEST PUSH2 0x326C DUP5 DUP5 DUP4 PUSH2 0x1CE4 JUMP JUMPDEST POP PUSH2 0x31A6 JUMP JUMPDEST PUSH1 0x4B SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3284 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x328E JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x32D2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x46 SLOAD DUP2 GT ISZERO PUSH2 0x3324 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH24 0x1BDD5D081BD9881C985B99D9481B1BD85908185B5BDD5B9D PUSH1 0x42 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3335 PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x475D AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xC178D379965E5657B6FC57494E392F121A14119215DFB422AAD7DB4CC03F2D10 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x3374 CALLER PUSH2 0x4498 JUMP JUMPDEST PUSH2 0x33BE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39B2B73232B91034B9903737BA1030B71037BBB732B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x341C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E657273686970206973206E6F74207472616E7366657261626C65000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3461 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D0C PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE DUP1 PUSH2 0x34BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE DUP1 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3534 DUP7 PUSH2 0x54CD JUMP JUMPDEST POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0x35A9 JUMPI DUP2 PUSH2 0x357F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x726174653D3 PUSH1 0xD4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x359F DUP4 PUSH2 0x3593 DUP8 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x565F AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x56B8 AND JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x1563 JUMP JUMPDEST POP PUSH1 0x0 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x35D6 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x35E0 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x3624 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP1 PUSH2 0x3661 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x76616C75653D3 PUSH1 0xCC SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x36AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x64657374696E6174696F6E3D3 PUSH1 0x9C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x36FC JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x36E9 JUMPI PUSH2 0x36E6 DUP5 DUP5 PUSH2 0x3525 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x36FA PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST POP JUMPDEST PUSH2 0x3707 DUP5 DUP5 DUP5 PUSH2 0x5722 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND DUP3 MSTORE DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0xD1BA4AC2E2A11B5101F6CB4D978F514A155B421E8EC396D2D9ABAF0BB02917EE SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x4A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3766 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x37A5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x37F9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x385A PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x3897 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x39 SLOAD DUP2 LT ISZERO PUSH2 0x3A25 JUMPI PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x38B5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3A1D JUMPI PUSH1 0x0 PUSH1 0x36 PUSH1 0x0 PUSH1 0x39 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x38F5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE JUMPDEST PUSH1 0x37 SLOAD PUSH2 0x393F SWAP1 PUSH1 0x1 PUSH4 0xFFFFFFFF PUSH2 0x5416 AND JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x3A07 JUMPI PUSH1 0x39 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3953 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x3979 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x39FF JUMPI PUSH1 0x37 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x39A6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x37 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x39CC JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x3A07 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x392B JUMP JUMPDEST POP PUSH1 0x37 DUP1 SLOAD SWAP1 PUSH2 0x3A1B SWAP1 PUSH1 0x0 NOT DUP4 ADD PUSH2 0x5C1C JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x389A JUMP JUMPDEST POP PUSH32 0xD218C430FA348F4CE67791021B6B89C0C3EACD4EAD1D8F5B83C60038EC28249B CALLER PUSH1 0x39 PUSH1 0x40 MLOAD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x3AB1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3A93 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x3ACC PUSH1 0x39 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x43 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4C SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3B19 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3B01 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B49 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x3B58 JUMPI POP PUSH2 0x3B58 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x3BA2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3BF6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x3737903832B73234B7339039BAB136B4B9B9B4B7B7 PUSH1 0x59 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3C57 PUSH1 0x39 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1438 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x141A JUMPI POP POP POP POP POP PUSH2 0x3AE6 JUMP JUMPDEST DUP2 EQ PUSH2 0x3C94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D59 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3CA0 PUSH1 0x39 PUSH1 0x0 PUSH2 0x5B9B JUMP JUMPDEST PUSH1 0x3A DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH32 0x13C935EB475AA0F6E931FECE83E2AC44569CE2D53460D29A6DEDAB40B965C8A3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x37 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x3CF6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x47 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x34 SLOAD SWAP1 JUMP JUMPDEST DUP1 DUP1 PUSH2 0x3D67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x76616C75653D3 PUSH1 0xCC SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3D70 CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x3D7F JUMPI POP PUSH2 0x3D7F CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x3DC9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x37B7363C9037BBB732B93E3E31B7B73A3937B63632B9 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3DDA PUSH1 0x40 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x47D8 AND JUMP JUMPDEST PUSH2 0x3DE2 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8FC DUP4 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x3E1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH32 0x611B7C0D84FDA988026215BEF9B3E4D81CBCECED7E679BE6D5E044B588467C0E CALLER PUSH2 0x3E45 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE DUP1 DUP3 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x3E7D CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x3EBC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1CA6 PUSH1 0x3B DUP3 PUSH4 0xFFFFFFFF PUSH2 0x57EC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3ED7 PUSH2 0x583C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3EF7 JUMPI POP DUP1 PUSH2 0x1563 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x3FBC JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3F15 DUP8 PUSH2 0x54CD JUMP JUMPDEST POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP POP DUP1 PUSH2 0x3F67 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x746F6B656E206E6F7420617661696C61626C65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x3FA2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x726174653D3 PUSH1 0xD4 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3FB6 DUP4 PUSH2 0x3593 DUP9 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x565F AND JUMP JUMPDEST SWAP4 POP POP POP POP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3FC9 PUSH2 0x58B2 JUMP JUMPDEST POP POP POP SWAP4 POP SWAP4 POP SWAP4 POP POP DUP1 PUSH2 0x401B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x746F6B656E206E6F7420617661696C61626C65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH2 0x4061 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x737461626C65636F696E20726174653D3 PUSH1 0x7C SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4075 DUP3 PUSH2 0x3593 DUP7 DUP7 PUSH4 0xFFFFFFFF PUSH2 0x565F AND JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4089 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x40C8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1C00 PUSH1 0x47 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x57EC AND JUMP JUMPDEST PUSH2 0x40E2 CALLER PUSH2 0x4515 JUMP JUMPDEST PUSH2 0x4121 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5C9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x12F0 PUSH1 0x40 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x57EC AND JUMP JUMPDEST PUSH2 0x413B CALLER PUSH2 0x4498 JUMP JUMPDEST DUP1 PUSH2 0x4145 JUMPI POP CALLER ADDRESS EQ JUMPDEST PUSH2 0x4189 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x37B7363C9037BBB732B93E3E39B2B633 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 DUP2 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP POP POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4298 JUMPI PUSH2 0x41D5 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E94 JUMPI INVALID JUMPDEST ISZERO PUSH2 0x4220 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x636F6E7461696E73206F776E65722061646472657373 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4237 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4290 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x636F6E7461696E7320302061646472657373 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x41BD JUMP JUMPDEST POP PUSH1 0x3A SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x42EF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1DDA1A5D195B1A5CDD081A5B9A5D1A585B1A5E9959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x43E0 JUMPI PUSH1 0x36 PUSH1 0x0 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x430A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP3 SWAP1 SWAP3 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE POP DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x43D8 JUMPI PUSH1 0x1 PUSH1 0x36 PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x4346 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x37 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x439B JUMPI INVALID JUMPDEST DUP4 SLOAD PUSH1 0x1 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x42F2 JUMP JUMPDEST POP PUSH1 0x3A DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 DUP2 MSTORE PUSH1 0x37 DUP1 SLOAD SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH32 0xB2F6CCCEE7A369E23E293C25AA19BEF80AF11EB26DEBA3EA0F2A02783F752E4A SWAP5 SWAP3 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x60 DUP4 ADD SWAP1 DUP5 SWAP1 DUP1 ISZERO PUSH2 0x4470 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4452 JUMPI JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x44 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1563 DUP3 PUSH2 0x4697 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x44FA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1B1A5B5A5D08185B1C9958591E481CD95D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x4504 DUP3 DUP3 PUSH2 0x5A21 JUMP JUMPDEST POP PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4522 PUSH1 0x34 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB429AFEB DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x458B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x45A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x41 EQ PUSH2 0x45BC JUMPI POP PUSH1 0x0 PUSH2 0x1563 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 BYTE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP3 GT ISZERO PUSH2 0x4602 JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x1563 JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1B EQ ISZERO DUP1 ISZERO PUSH2 0x461A JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x1C EQ ISZERO JUMPDEST ISZERO PUSH2 0x462B JUMPI PUSH1 0x0 SWAP4 POP POP POP POP PUSH2 0x1563 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP5 AND DUP3 DUP5 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x1 SWAP3 PUSH1 0xA0 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 PUSH1 0x1F NOT DUP2 ADD SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4682 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x4721 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4702 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x1216 JUMP JUMPDEST POP SELFBALANCE PUSH2 0x1216 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x4743 SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x4752 JUMPI POP DUP1 SLOAD PUSH2 0x1216 JUMP JUMPDEST POP PUSH1 0x1 DUP2 ADD SLOAD PUSH2 0x1216 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0xFF AND PUSH2 0x47B6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6C696D6974206861736E2774206265656E207365742079657400000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x3 SWAP1 SWAP2 ADD SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x47CA DUP4 PUSH2 0x54CD JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x47E1 DUP3 PUSH2 0x5A44 JUMP JUMPDEST DUP1 DUP3 PUSH1 0x1 ADD SLOAD LT ISZERO PUSH2 0x482D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x185D985A5B18589B194F185B5BDD5B9D PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 ADD SLOAD PUSH2 0x4842 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x5416 AND JUMP JUMPDEST DUP3 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x48AE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x454E535265736F6C7661626C65206E6F7420696E697469616C697A6564000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x178B8BF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x178B8BF SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x48FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x490E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1D9DABEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x3B3B57DE SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x49F5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP6 AND SWAP2 PUSH4 0xDD62ED3E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x49C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x49DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x49F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO JUMPDEST PUSH2 0x4A30 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x36 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D7C PUSH1 0x36 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x4A82 SWAP1 DUP5 SWAP1 PUSH2 0x4BB1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4A99 DUP4 PUSH2 0x54CD JUMP JUMPDEST POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4AB5 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAFC72E93 DUP6 DUP6 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4B11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4B56 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4B73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4B9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x4BC3 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4A87 JUMP JUMPDEST PUSH2 0x4C14 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A2063616C6C20746F206E6F6E2D636F6E747261637400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x4C52 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x4C33 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4CB4 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4CB9 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x4D10 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x4D69 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x4D69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5D2F PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3C DUP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP5 ADD DUP5 MSTORE PUSH1 0x5C SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x4C DUP1 SLOAD PUSH1 0x1 ADD SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP1 MLOAD PUSH32 0xAB0423A75986556234AECD171C46CE7F5E45607D8070BF5230F2735B50322BFF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x4E27 JUMPI POP PUSH2 0x4E27 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x4E35 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x4E70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x4E9B JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x4EC6 JUMPI PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x4EF5 JUMPI POP PUSH2 0x4EF5 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x4F03 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x4F3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x4F69 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP2 ISZERO PUSH2 0x4EC6 JUMPI PUSH1 0x34 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x4FA2 JUMPI POP PUSH2 0x4FA2 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x4FB0 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x4FEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5016 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL DUP5 ISZERO ISZERO DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP2 DUP3 SWAP1 SSTORE PUSH1 0xFF SWAP2 DIV AND PUSH2 0x508E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE SWAP1 MLOAD PUSH32 0x808639FF9C8E4732D60B6C2330DE498035416D229F27A77D259680895EFEC122 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x850B3DF64837D7D518B45F5AA64D104652C3B80EB5B34A8E3D9EB666CB7CDEA5 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 DUP1 ISZERO PUSH2 0x4A82 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x5101 JUMPI POP PUSH2 0x5101 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x510F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x514A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5175 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE TIMESTAMP SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD DUP2 SWAP1 MSTORE PUSH1 0x3B DUP5 SWAP1 SSTORE PUSH1 0x3C DUP5 SWAP1 SSTORE PUSH1 0x3D SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3E SSTORE PUSH1 0x3F DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x51EC JUMPI POP PUSH2 0x51EC PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x51FA JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x5235 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5260 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH8 0x6F05B59D3B20000 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE TIMESTAMP DUP3 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 SWAP1 SWAP4 ADD DUP4 SWAP1 MSTORE SWAP3 DUP2 SWAP1 SSTORE PUSH1 0x41 SSTORE PUSH1 0x42 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x43 SSTORE PUSH1 0x44 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x52C1 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x52DD JUMPI POP PUSH2 0x52DD PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x52EB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x5326 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5351 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST PUSH2 0x535A DUP3 PUSH2 0x5A9C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5364 PUSH2 0x58B2 JUMP JUMPDEST POP POP POP POP POP SWAP2 POP POP PUSH1 0x0 DUP2 GT PUSH2 0x53B1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x37379039BA30B13632B1B7B4B7 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2710 MUL PUSH1 0x46 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE TIMESTAMP SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD DUP2 SWAP1 MSTORE PUSH1 0x47 DUP4 SWAP1 SSTORE PUSH1 0x48 SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x49 SSTORE PUSH1 0x4A SSTORE PUSH1 0x4B DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x546D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x21D4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x54E3 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1F69565F DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5538 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x554C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x5575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1 PUSH1 0x20 SHL DUP3 GT ISZERO PUSH2 0x5594 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x55A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x55C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x55EF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x55D7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x561C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0xC0 SWAP1 SWAP6 ADD MLOAD SWAP8 SWAP15 POP SWAP3 SWAP13 POP SWAP1 SWAP11 POP SWAP9 POP SWAP7 POP SWAP5 POP SWAP2 SWAP3 POP POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP1 SWAP3 SWAP5 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x566E JUMPI POP PUSH1 0x0 PUSH2 0x1563 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x567B JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x21D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CBD PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x570E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP2 PUSH2 0x5719 JUMPI INVALID JUMPDEST DIV SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x57D2 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP4 SWAP1 DUP4 DUP2 DUP2 DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x577B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5780 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x57CC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1CD85999551C985B9CD9995C8819985A5B1959 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH2 0x4A82 JUMP JUMPDEST PUSH2 0x4A82 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP5 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x5B49 AND JUMP JUMPDEST DUP1 DUP3 PUSH1 0x3 ADD SLOAD EQ PUSH2 0x582E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5C7B PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4ED8 DUP3 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x5A21 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5849 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE9CBD822 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5881 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5895 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x58AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x58C8 PUSH1 0x45 SLOAD PUSH2 0x484E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3EFEC5E9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5900 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5914 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x593D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1 PUSH1 0x20 SHL DUP3 GT ISZERO PUSH2 0x595C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x20 SHL DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x598A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x59B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x599F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x59E4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD SWAP1 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0xC0 SWAP1 SWAP6 ADD MLOAD SWAP8 SWAP16 SWAP4 SWAP15 POP SWAP2 SWAP13 POP SWAP11 POP SWAP9 POP SWAP1 SWAP7 POP SWAP3 SWAP5 POP SWAP2 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5A2A DUP3 PUSH2 0x5A44 JUMP JUMPDEST DUP1 DUP3 SSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x4ED8 JUMPI DUP2 SLOAD PUSH1 0x1 DUP4 ADD SSTORE POP POP JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0x5A5C SWAP1 PUSH3 0x15180 PUSH4 0xFFFFFFFF PUSH2 0x5473 AND JUMP JUMPDEST TIMESTAMP GT ISZERO PUSH2 0x52C1 JUMPI TIMESTAMP PUSH1 0x2 DUP3 ADD SSTORE DUP1 SLOAD PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x40 MLOAD PUSH32 0xE93BC25276D408D390778E7A8B926F2F67209C43ED540081B951FE128F0D3CD2 SWAP1 PUSH1 0x0 SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x5AB5 JUMPI POP PUSH2 0x5AB5 PUSH2 0x4E08 JUMP JUMPDEST DUP1 PUSH2 0x5AC3 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST PUSH2 0x5AFE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2E DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5CDE PUSH1 0x2E SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x5B29 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT PUSH2 0xFF00 NOT SWAP1 SWAP2 AND PUSH2 0x100 OR AND PUSH1 0x1 OR SWAP1 SSTORE JUMPDEST DUP2 ISZERO PUSH2 0x4EC6 JUMPI PUSH1 0x45 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x4ED8 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x4A82 SWAP1 DUP5 SWAP1 PUSH2 0x4BB1 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x52C1 SWAP2 SWAP1 PUSH2 0x5C3C JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x5C0C JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x5C0C JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 CALLDATALOAD AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x5BD9 JUMP JUMPDEST POP PUSH2 0x5C18 SWAP3 SWAP2 POP PUSH2 0x5C56 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0x4A82 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0x4A82 SWAP2 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST PUSH2 0x121F SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x5C18 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH2 0x121F SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x5C18 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x5C5C JUMP INVALID PUSH4 0x6F6E6669 PUSH19 0x6D65642F7375626D6974746564206C696D6974 KECCAK256 PUSH14 0x69736D6174636873656E64657220 PUSH10 0x73206E6F74206120636F PUSH15 0x74726F6C6C65720000000000005361 PUSH7 0x654D6174683A20 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77436F6E747261637420 PUSH10 0x6E7374616E6365206861 PUSH20 0x20616C7265616479206265656E20696E69746961 PUSH13 0x697A65646F776E65722063616E PUSH15 0x6F742062652073657420746F207A65 PUSH19 0x6F20616464726573735361666545524332303A KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x7563636565646E6F6E2D6D61746368696E672070 PUSH6 0x6E64696E6720 PUSH24 0x686974656C69737420686173685361666545524332303A20 PUSH2 0x7070 PUSH19 0x6F76652066726F6D206E6F6E2D7A65726F2074 PUSH16 0x206E6F6E2D7A65726F20616C6C6F7761 PUSH15 0x6365A265627A7A723158200650F450 0xC2 0xD8 0xF8 0xFC PUSH22 0x477F70E683F64B5CC64733A3582CE80A54555FD95DD9 SUB PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "22334:17725:31:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30394:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30394:137:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30394:137:31;-1:-1:-1;;;;;;30394:137:31;;:::i;:::-;;;;;;;;;;;;;;;;;;16037:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16037:104:31;;;:::i;:::-;;;;;;;;;;;;;;;;18648:286;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18648:286:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18648:286:31;;:::i;:::-;;3935:677;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3935:677:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3935:677:31;;:::i;23198:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23198:47:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23198:47:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38439:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38439:244:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38439:244:31;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;38439:244:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38439:244:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38439:244:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38439:244:31;;-1:-1:-1;38439:244:31;;-1:-1:-1;;;;;38439:244:31:i;:::-;;;;-1:-1:-1;;;;;;38439:244:31;;;;;;;;;;;;;;25617:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25617:550:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;25617:550:31;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;25617:550:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25617:550:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;25617:550:31;;-1:-1:-1;25617:550:31;-1:-1:-1;25617:550:31;:::i;21121:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21121:117:31;;;:::i;28592:344::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28592:344:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28592:344:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28592:344:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28592:344:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28592:344:31;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28592:344:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28592:344:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;28592:344:31;;-1:-1:-1;28592:344:31;-1:-1:-1;28592:344:31;:::i;2749:94:26:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2749:94:26;;;:::i;16644:179:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16644:179:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16644:179:31;;:::i;18434:106::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18434:106:31;;;:::i;3121:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3121:38:31;;;:::i;8339:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8339:124:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8339:124:31;;;;;;;;;;;;;;;;;2937:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2937:44:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2937:44:31;-1:-1:-1;;;;;2937:44:31;;:::i;29386:943::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29386:943:31;;;;;;;;:::i;20234:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20234:233:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20234:233:31;;:::i;15655:161::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15655:161:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15655:161:31;;:::i;36222:1934::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36222:1934:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;36222:1934:31;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;36222:1934:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;36222:1934:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;36222:1934:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36222:1934:31;;-1:-1:-1;36222:1934:31;;-1:-1:-1;;;;;36222:1934:31:i;26519:1111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26519:1111:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26519:1111:31;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;26519:1111:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26519:1111:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;26519:1111:31;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;26519:1111:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26519:1111:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;26519:1111:31;;-1:-1:-1;26519:1111:31;-1:-1:-1;26519:1111:31;:::i;8160:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8160:126:31;;;:::i;5562:1117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5562:1117:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5562:1117:31;;:::i;15861:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15861:119:31;;;:::i;10379:673::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10379:673:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10379:673:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;10379:673:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10379:673:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;10379:673:31;;-1:-1:-1;10379:673:31;-1:-1:-1;10379:673:31;:::i;24535:594::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24535:594:31;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;24535:594:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3119:306:26:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3119:306:26;;;:::i;19061:304:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19061:304:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19061:304:31;;:::i;28999:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28999:91:31;;;:::i;1695:89:25:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1695:89:25;;;:::i;:::-;;;;-1:-1:-1;;;;;1695:89:25;;;;;;;;;;;;;;17856:125:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17856:125:31;;;:::i;9544:711::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9544:711:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9544:711:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;9544:711:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9544:711:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;9544:711:31;;-1:-1:-1;9544:711:31;-1:-1:-1;9544:711:31;:::i;1496:105:27:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1496:105:27;;;:::i;3508:85:26:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3508:85:26;;;:::i;28006:87:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28006:87:31;;;:::i;16400:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16400:100:31;;;:::i;31468:2016::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31468:2016:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31468:2016:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31468:2016:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31468:2016:31;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;31468:2016:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31468:2016:31;;-1:-1:-1;31468:2016:31;;-1:-1:-1;;;;;31468:2016:31:i;21451:145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21451:145:31;;;:::i;20582:251::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20582:251:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20582:251:31;;:::i;1823:809:26:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1823:809:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1823:809:26;;;;;;;;;;:::i;33671:550:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33671:550:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;33671:550:31;;;;;;;;:::i;16197:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16197:147:31;;;:::i;3208:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3208:26:31;;;:::i;38960:1097::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38960:1097:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38960:1097:31;;;;;;;;;;;;;;;;;:::i;21294:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21294:102:31;;;:::i;6748:1358::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6748:1358:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6748:1358:31;;:::i;18043:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18043:110:31;;;:::i;23812:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23812:25:31;;;:::i;11121:145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11121:145:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11121:145:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;11121:145:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11121:145:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11121:145:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;11121:145:31;;-1:-1:-1;11121:145:31;;-1:-1:-1;;;;;11121:145:31:i;4680:659::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4680:659:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4680:659:31;;:::i;2987:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2987:31:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2987:31:31;;:::i;21663:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21663:98:31;;;:::i;3165:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3165:37:31;;;:::i;1778:95:24:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1778:95:24;;;:::i;30711:425:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30711:425:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30711:425:31;;:::i;15318:180::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15318:180:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15318:180:31;;:::i;34422:1540::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34422:1540:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34422:1540:31;;;;;;;;:::i;20894:177::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20894:177:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20894:177:31;;:::i;17611:189::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17611:189:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17611:189:31;;:::i;8594:827::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8594:827:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8594:827:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8594:827:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8594:827:31;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;8594:827:31;;-1:-1:-1;8594:827:31;-1:-1:-1;8594:827:31;:::i;18214:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18214:153:31;;;:::i;27789:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27789:108:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27789:108:31;-1:-1:-1;;;;;27789:108:31;;:::i;30394:137::-;-1:-1:-1;;;;;;30488:36:31;;-1:-1:-1;;;30488:36:31;30394:137;;;;:::o;16037:104::-;16115:19;;16037:104;;:::o;18648:286::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;18762:7;17419:8;18734:35;;:74;;;;;17351:10;18773:7;:35;;18734:74;18726:106;;;;;-1:-1:-1;;;18726:106:31;;;;;;;;;;;;-1:-1:-1;;;18726:106:31;;;;;;;;;;;;;;;18842:33;:14;18867:7;18842:33;:24;:33;:::i;:::-;18890:37;;;18907:10;18890:37;;;;;;;;;;;;;;;;;;;;;18648:286;:::o;3935:677::-;1608:20;1617:10;1608:8;:20::i;:::-;:49;;;;1632:25;1646:10;1632:13;:25::i;:::-;1600:84;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;;;;4082:26;;;;4074:60;;;;;-1:-1:-1;;;4074:60:31;;;;;;;;;;;;-1:-1:-1;;;4074:60:31;;;;;;;;;;;;;;;4256:40;4270:25;4256:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4256:40:31;;;;;;;;;;;;;;;;;;;;;:13;:40::i;:::-;4247:5;:49;4239:97;;;;-1:-1:-1;;;4239:97:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4382:32;4389:25;;4382:32;:::i;:::-;4471:26;:34;;-1:-1:-1;;4471:34:31;;;4560:45;;;4587:10;4560:45;;;;;;;;;;;;;;;;;;;;;3935:677;:::o;23198:47::-;;;;;;;;;;;;;;-1:-1:-1;;;23198:47:31;;;;:::o;38439:244::-;38532:6;;38565:31;:11;38585:10;38565:31;:19;:31;:::i;:::-;38550:46;;38614:14;38623:4;38614:8;:14::i;:::-;38606:44;;;;;-1:-1:-1;;;38606:44:31;;;;;;;;;;;;-1:-1:-1;;;38606:44:31;;;;;;;;;;;;;;;-1:-1:-1;;;;38667:9:31;-1:-1:-1;38439:244:31;;;;;:::o;25617:550::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;25786:19;25778:52;;;;;-1:-1:-1;;;25778:52:31;;;;;;;;;;;;-1:-1:-1;;;25778:52:31;;;;;;;;;;;;;;;25907:9;25902:214;25922:18;;;25902:214;;;25961:14;25978:20;25987:7;;25995:1;25987:10;;;;;;;;;;;;;-1:-1:-1;;;;;25987:10:31;25978:8;:20::i;:::-;25961:37;;26072:33;26081:3;26086:7;;26094:1;26086:10;;;;;;;;;;;;;-1:-1:-1;;;;;26086:10:31;26098:6;26072:8;:33::i;:::-;-1:-1:-1;25942:3:31;;25902:214;;;;26131:29;26147:3;26152:7;;26131:29;;;;-1:-1:-1;;;;;26131:29:31;-1:-1:-1;;;;;26131:29:31;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;26131:29:31;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;26131:29:31;;;;-1:-1:-1;26131:29:31;;-1:-1:-1;;;;;26131:29:31;25617:550;;;:::o;21121:117::-;21174:7;21200:31;:10;:29;:31::i;:::-;21193:38;;21121:117;:::o;28592:344::-;28690:6;28708:16;28754:5;;28737:23;;;;;;;30:3:-1;22:6;14;1:33;28737:23:31;;;45:16:-1;;;;26:21;;;-1:-1;;22:32;6:49;;28737:23:31;;;28727:34;;49:4:-1;28727:34:31;;;;28834:38;;;;;;;;;;;;;;;;;;28727:34;;-1:-1:-1;;;;28876:9:31;-1:-1:-1;28834:38:31;;-1:-1:-1;28727:34:31;;-1:-1:-1;28861:10:31;;-1:-1:-1;28834:38:31;;;;;;28861:10;28834:38;;28861:10;28834:38;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;28834:16:31;;-1:-1:-1;;;28834:38:31:i;:::-;-1:-1:-1;;;;;;28834:51:31;;28826:77;;;;;-1:-1:-1;;;28826:77:31;;;;;;;;;;;;-1:-1:-1;;;28826:77:31;;;;;;;;;;;;;;;-1:-1:-1;;;;28920:9:31;28592:344;-1:-1:-1;;;;;28592:344:31:o;2749:94:26:-;2821:15;;-1:-1:-1;;;2821:15:26;;;;;2749:94::o;16644:179:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;16728:39;:11;16759:7;16728:39;:30;:39;:::i;:::-;16782:34;;;;;;;;;;;;;;;;;16644:179;:::o;18434:106::-;18513:14;:20;18434:106;:::o;3121:38::-;;;;;;:::o;8339:124::-;8397:16;8432:24;8425:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8425:31:31;;;;;;;;;;;;;;;;;;;;;;;8339:124;:::o;2937:44::-;;;;;;;;;;;;;;;:::o;29386:943::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;29562:24;29579:6;29562:16;:24::i;:::-;29554:55;;;;;-1:-1:-1;;;29554:55:31;;;;;;;;;;;;-1:-1:-1;;;29554:55:31;;;;;;;;;;;;;;;29672:23;29698:36;29718:6;29726:7;29698:19;:36::i;:::-;29672:62;-1:-1:-1;29864:41:31;:10;29672:62;29864:41;:24;:41;:::i;:::-;29962:22;29987:25;29999:12;;29987:11;:25::i;:::-;29962:50;-1:-1:-1;;;;;;30026:20:31;;;30022:253;;30062:50;-1:-1:-1;;;;;30062:25:31;;30088:14;30104:7;30062:50;:25;:50;:::i;:::-;30135:14;-1:-1:-1;;;;;30126:29:31;;30156:6;30164:7;30126:46;;;;;;;;;;;;;-1:-1:-1;;;;;30126:46:31;-1:-1:-1;;;;;30126:46:31;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30126:46:31;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30126:46:31;;;;30022:253;;;30212:14;-1:-1:-1;;;;;30203:29:31;;30239:7;30248:6;30256:7;30203:61;;;;;;;;;;;;;-1:-1:-1;;;;;30203:61:31;-1:-1:-1;;;;;30203:61:31;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30203:61:31;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30203:61:31;;;;;30022:253;30290:32;;;-1:-1:-1;;;;;30290:32:31;;;;;;;;;;;;;;;;;;;;;;;2168:1;;29386:943;;:::o;20234:233::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;20327:17;;20316:7;:28;;20308:65;;;;;-1:-1:-1;;;20308:65:31;;;;;;;;;;;;-1:-1:-1;;;20308:65:31;;;;;;;;;;;;;;;20383:29;:10;20404:7;20383:29;:20;:29;:::i;:::-;20427:33;;;20440:10;20427:33;;;;;;;;;;;;;;;;;;;;;20234:233;:::o;15655:161::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;15730:30;:11;15752:7;15730:30;:21;:30;:::i;:::-;15775:34;;;15789:10;15775:34;;;;;;;;;;;;;;;;;;;;;15655:161;:::o;36222:1934::-;36340:12;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;36559:26:31;;;;;;:12;:26;;;;;;;;36554:91;;36601:33;:11;36627:6;36601:33;:25;:33;:::i;:::-;36746:34;36754:12;-1:-1:-1;;;;;36746:32:31;;:34::i;:::-;:69;;;;;36784:31;36802:12;36784:17;:31::i;:::-;36742:1098;;;36918:10;36942:14;36985:48;37013:12;37027:5;36985:27;:48::i;:::-;-1:-1:-1;;;;;37052:16:31;;;;;;:12;:16;;;;;;36970:63;;-1:-1:-1;36970:63:31;-1:-1:-1;37052:16:31;;37047:335;;37255:18;37276:36;37291:12;37305:6;37276:14;:36::i;:::-;37255:57;-1:-1:-1;37330:37:31;:11;37255:57;37330:37;:25;:37;:::i;:::-;37047:335;;37531:45;-1:-1:-1;;;;;37531:38:31;;37570:5;37531:45;:38;:45;:::i;:::-;37697:13;;;37707:2;37697:13;;;;;;;;;37680:14;;37697:13;;;21:6:-1;;104:10;37697:13:31;87:34:-1;135:17;;-1:-1;37697:13:31;37680:30;;37732:4;37724:12;;:1;37726:2;37724:5;;;;;;;;;;;:12;-1:-1:-1;;;;;37724:12:31;;;;;;;;;37756:51;37776:12;37790:6;37798:5;37805:1;37756:51;;;;-1:-1:-1;;;;;37756:51:31;-1:-1:-1;;;;;37756:51:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37756:51:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37756:51:31;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37756:51:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37828:1;-1:-1:-1;37821:8:31;;-1:-1:-1;;37821:8:31;36742:1098;37851:12;37865:23;37892:12;-1:-1:-1;;;;;37892:17:31;37916:6;37924:5;37892:38;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;37892:38:31;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;37850:80:31;;;;37948:7;37964:10;37940:36;;;;;-1:-1:-1;;;37940:36:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37940:36:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37992:60;38012:12;38026:6;38034:5;38041:10;37992:60;;;;-1:-1:-1;;;;;37992:60:31;-1:-1:-1;;;;;37992:60:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37992:60:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37992:60:31;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37992:60:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38139:10;-1:-1:-1;;2168:1:31;36222:1934;;;;;:::o;26519:1111::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1471:64:24;;;;;;;;;;;;;;;26823:10:31;26872:9;26866:15;;26951:16;26970:99;27010:2;27022:4;27029:6;27037:5;;26980:63;;;;;;-1:-1:-1;;;26980:63:31;;;;;;;;;;;-1:-1:-1;;;;;26980:63:31;-1:-1:-1;;;;;26980:63:31;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;26980:63:31;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26980:63:31;;;26970:74;;;;;;:97;:99::i;:::-;26951:118;;23576:10;27187:9;;-1:-1:-1;;;;;27145:51:31;;:38;27162:8;27172:10;;27145:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27145:16:31;;-1:-1:-1;;;27145:38:31:i;:::-;-1:-1:-1;;;;;;27145:51:31;;27137:77;;;;;-1:-1:-1;;;27137:77:31;;;;;;;;;;;;-1:-1:-1;;;27137:77:31;;;;;;;;;;;;;;;27327:10;;27317:6;:20;27309:42;;;;;-1:-1:-1;;;27309:42:31;;;;;;;;;;;;-1:-1:-1;;;27309:42:31;;;;;;;;;;;;;;;27361:21;:19;:21::i;:::-;27450:12;27464:23;27499:4;-1:-1:-1;;;;;27491:18:31;27510:5;;27491:25;;;;;30:3:-1;22:6;14;1:33;27491:25:31;;45:16:-1;;;-1:-1;27491:25:31;;-1:-1:-1;27491:25:31;;-1:-1:-1;;27491:25:31;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;27449:67:31;;;;27534:7;27550:10;27526:36;;;;;-1:-1:-1;;;27526:36:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27526:36:31;;27578:45;27605:5;;27612:10;27578:45;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;;;137:4;117:14;;;-1:-1;;113:30;157:16;;;27578:45:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27578:45:31;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27578:45:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1545:1:24;;;;26519:1111:31;;;;;:::o;8160:126::-;8219:16;8254:25;8247:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8247:32:31;;;;;;;;;;;;;;;;;;;;;;8160:126;:::o;5562:1117::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1471:64:24;;;;;;;;;;;;;;;5720:26:31;;;;5712:60;;;;;-1:-1:-1;;;5712:60:31;;;;;;;;;;;;-1:-1:-1;;;5712:60:31;;;;;;;;;;;;;;;5894:40;5908:25;5894:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5894:40:31;;;;;;;;;;;;;;;;;;;;:13;:40::i;:::-;5885:5;:49;5877:97;;;;-1:-1:-1;;;5877:97:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6029:9;6024:383;6048:25;:32;6044:36;;6024:383;;;6156:12;:42;6169:25;6195:1;6169:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6169:28:31;6156:42;;;;;;;;;;;;;;;6151:246;;6311:4;6266:12;:42;6279:25;6305:1;6279:28;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6279:28:31;6266:42;;;;;;;;;;;;:49;;-1:-1:-1;;6266:49:31;;;;;;;;;;6353:25;:28;;6333:14;;6353:25;6379:1;;6353:28;;;;;;;;;;;;;;;;;;27:10:-1;;6353:28:31;23:18:-1;;45:23;;6333:49:31;;;;;;;;;;-1:-1:-1;;;;;;6333:49:31;-1:-1:-1;;;;;6353:28:31;;;6333:49;;;;;;6151:246;6082:3;;6024:383;;;;6457:55;6474:10;6486:25;6457:55;;;;-1:-1:-1;;;;;6457:55:31;-1:-1:-1;;;;;6457:55:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6457:55:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6558:32;6565:25;;6558:32;:::i;:::-;-1:-1:-1;6638:26:31;:34;;-1:-1:-1;;6638:34:31;;;5562:1117::o;15861:119::-;15915:7;15941:32;:11;:30;:32::i;10379:673::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;3774:26;;;;3773:27;:57;;;;-1:-1:-1;3805:25:31;;;;;;;3804:26;3773:57;3765:98;;;;;-1:-1:-1;;;3765:98:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;10564:14;;;;;;;10556:52;;;;;-1:-1:-1;;;10556:52:31;;;;;;;;;;;;-1:-1:-1;;;10556:52:31;;;;;;;;;;;;;;;10686:21;10678:49;;;;;-1:-1:-1;;;10678:49:31;;;;;;;;;;;;-1:-1:-1;;;10678:49:31;;;;;;;;;;;;;;;10805:37;:24;10832:10;;10805:37;:::i;:::-;-1:-1:-1;10896:25:31;:32;;-1:-1:-1;;10896:32:31;;;;;11019:25;;;;;;;;;;;;;;;;;;10981:64;;11007:10;;;;11019:25;;11007:10;;;;;;11019:25;;;11007:10;;11019:25;11007:10;11019:25;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;11019:13:31;;-1:-1:-1;;;11019:25:31:i;:::-;10981:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;10981:64:31;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;10981:64:31;;;;-1:-1:-1;10981:64:31;;-1:-1:-1;;;;;10981:64:31;10379:673;;:::o;24535:594::-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;24816:31:31;24841:5;24816:24;:31::i;:::-;24857:41;24881:16;24857:23;:41::i;:::-;24908:43;24927:7;24936:14;24908:18;:43::i;:::-;24961:35;24983:12;24961:21;:35::i;:::-;25006:26;:24;:26::i;:::-;25042:42;25063:20;25042;:42::i;:::-;25094:12;:28;;;1264:55:20;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;1264:55;24535:594:31;;;;;;;;:::o;3119:306:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;3240:15;;-1:-1:-1;;;3240:15:26;;;;3232:57;;;;;-1:-1:-1;;;3232:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;3343:6;:19;;-1:-1:-1;;;;;;3343:19:26;;;3378:40;;;3360:1;3378:40;;;;;;;;;;;;;;;;;;;;3119:306::o;19061:304:31:-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;19184:7;17419:8;19156:35;;:74;;;;;17351:10;19195:7;:35;;19156:74;19148:106;;;;;-1:-1:-1;;;19148:106:31;;;;;;;;;;;;-1:-1:-1;;;19148:106:31;;;;;;;;;;;;;;;19264:42;:14;19298:7;19264:42;:33;:42;:::i;:::-;19321:37;;;;;;;;;;;;;;;;;19061:304;:::o;28999:91::-;29071:12;;28999:91;:::o;1695:89:25:-;1765:12;;-1:-1:-1;;;;;1765:12:25;1695:89;:::o;17856:125:31:-;17913:7;17939:35;:14;:33;:35::i;9544:711::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;3774:26;;;;3773:27;:57;;;;-1:-1:-1;3805:25:31;;;;;;;3804:26;3773:57;3765:98;;;;;-1:-1:-1;;;3765:98:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;9676:10;;3333:293;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;;;3405:204:31;3429:10;:17;3425:1;:21;3405:204;;;3476:23;3485:10;3496:1;3485:13;;;;;;;;;;;;;;3476:8;:23::i;:::-;3475:24;3467:59;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;;;;3573:1;-1:-1:-1;;;;;3548:27:31;:10;3559:1;3548:13;;;;;;;;;;;;;;-1:-1:-1;;;;;3548:27:31;;;3540:58;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;;;;3448:3;;3405:204;;;-1:-1:-1;9766:14:31;;;;;;;9758:52;;;;;-1:-1:-1;;;9758:52:31;;;;;;;;;;;;-1:-1:-1;;;9758:52:31;;;;;;;;;;;;;;;9881:21;9873:49;;;;;-1:-1:-1;;;9873:49:31;;;;;;;;;;;;-1:-1:-1;;;9873:49:31;;;;;;;;;;;;;;;10005:38;:25;10033:10;;10005:38;:::i;:::-;-1:-1:-1;10097:26:31;:33;;-1:-1:-1;;10097:33:31;10126:4;10097:33;;;10222:25;;;;;;;;;;;;;;;;;;10183:65;;10210:10;;;;10222:25;;10210:10;;;;;;10222:25;;;10210:10;;10222:25;10210:10;10222:25;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;10222:13:31;;-1:-1:-1;;;10222:25:31:i;:::-;10183:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;10183:65:31;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;10183:65:31;;;;-1:-1:-1;10183:65:31;;-1:-1:-1;;;;;10183:65:31;3873:1;9544:711;;:::o;1496:105:27:-;1575:19;;1496:105;:::o;3508:85:26:-;3580:6;;-1:-1:-1;;;;;3580:6:26;3508:85;:::o;28006:87:31:-;1516:20:26;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;28065:21:31;:19;:21::i;:::-;28006:87::o;16400:100::-;16476:11;:17;16400:100;:::o;31468:2016::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;31588:24;;31615:2;31588:29;;;;:24;31566:19;;;32016:17;32057:1421;32070:11;32064:3;:17;32057:1421;;;32230:28;:20;32255:2;32230:28;:24;:28;:::i;:::-;32444:27;;;32438:34;;32605:2;32573:36;;32567:43;32826:2;32794:36;;;32788:43;;32207:51;;-1:-1:-1;32434:2:31;32430:43;;;;;-1:-1:-1;32567:43:31;;-1:-1:-1;32788:43:31;;-1:-1:-1;32794:36:31;-1:-1:-1;33002:27:31;33026:2;33002:19;32467:3;32788:43;33002:19;:7;:19;:::i;:::-;:23;:27;:23;:27;:::i;:::-;32996:33;;33149:11;33142:3;:18;;33134:44;;;;;-1:-1:-1;;;33134:44:31;;;;;;;;;;;;-1:-1:-1;;;33134:44:31;;;;;;;;;;;;;;;33249:15;33245:70;;-1:-1:-1;33291:9:31;;;;;;;;;-1:-1:-1;33291:9:31;;33245:70;33423:44;33442:11;33455:5;33462:4;33423:18;:44::i;:::-;;32057:1421;;21451:145;21548:41;;;;21451:145;:::o;20582:251::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;20684:17;;20673:7;:28;;20665:65;;;;;-1:-1:-1;;;20665:65:31;;;;;;;;;;;;-1:-1:-1;;;20665:65:31;;;;;;;;;;;;;;;20740:38;:10;20770:7;20740:38;:29;:38;:::i;:::-;20793:33;;;;;;;;;;;;;;;;;20582:251;:::o;1823:809:26:-;1516:20;1525:10;1516:8;:20::i;:::-;1508:55;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;-1:-1:-1;;;1508:55:26;;;;;;;;;;;;;;;1988:15;;-1:-1:-1;;;1988:15:26;;;;1980:57;;;;;-1:-1:-1;;;1980:57:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:22:26;;2110:70;;;;-1:-1:-1;;;2110:70:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:15;:31;;-1:-1:-1;;;;2265:31:26;-1:-1:-1;;;2265:31:26;;;;;;;;2375:75;;2414:25;;;-1:-1:-1;;;;;2414:25:26;;;;;;;;;;;;;;;2375:75;2531:6;;2510:38;;;-1:-1:-1;;;;;2531:6:26;;;2510:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2608:6:26;:17;;-1:-1:-1;;;;;;2608:17:26;-1:-1:-1;;;;;2608:17:26;;;;;;;;;;1823:809::o;33671:550:31:-;33749:7;33838:17;33857:12;33871:14;33895:21;33909:6;33895:13;:21::i;:::-;33835:81;;;;;;;;;;33996:9;33992:205;;;34029:9;34021:28;;;;;-1:-1:-1;;;34021:28:31;;;;;;;;;;;;-1:-1:-1;;;34021:28:31;;;;;;;;;;;;;;;34154:32;34176:9;34154:17;:7;34166:4;34154:17;:11;:17;:::i;:::-;:21;:32;:21;:32;:::i;:::-;34147:39;;;;;;;33992:205;-1:-1:-1;34213:1:31;;33671:550;-1:-1:-1;;;;;33671:550:31:o;16197:147::-;16295:42;;;;16197:147;:::o;3208:26::-;;;;;;;;;:::o;38960:1097::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;39065:7;25234:11;25226:31;;;;;-1:-1:-1;;;25226:31:31;;;;;;;;;;;;-1:-1:-1;;;25226:31:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;39153:17:31;;39145:43;;;;;-1:-1:-1;;;39145:43:31;;;;;;;;;;;;-1:-1:-1;;;39145:43:31;;;;;;;;;;;;;;;-1:-1:-1;;;;;39277:17:31;;;;;;:12;:17;;;;;;;;39272:584;;39394:7;-1:-1:-1;;;;;39498:20:31;;;39494:103;;39551:31;39566:6;39574:7;39551:14;:31::i;:::-;39538:44;;39494:103;39808:37;:11;39834:10;39808:37;:25;:37;:::i;:::-;39272:584;;39931:35;39945:3;39950:6;39958:7;39931:13;:35::i;:::-;40017:33;;;-1:-1:-1;;;;;40017:33:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:1;38960:1097;;;:::o;21294:102::-;21371:18;;21294:102;:::o;6748:1358::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1471:64:24;;;;;;;;;;;;;;;6935:25:31;;;;;;;6927:59;;;;;-1:-1:-1;;;6927:59:31;;;;;;;;;;;;-1:-1:-1;;;6927:59:31;;;;;;;;;;;;;;;7107:39;7121:24;7107:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7107:39:31;;;;;;;;;;;;;;;;;;;;:13;:39::i;:::-;7098:5;:48;7090:96;;;;-1:-1:-1;;;7090:96:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7238:9;7233:601;7257:24;:31;7253:35;;7233:601;;;7347:12;:41;7360:24;7385:1;7360:27;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7360:27:31;7347:41;;;;;;;;;;;;;;;7343:481;;;7452:5;7408:12;:41;7421:24;7446:1;7421:27;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7421:27:31;7408:41;;;;;;;;;;;;:49;;-1:-1:-1;;7408:49:31;;;;;;;;;;;7475:294;7499:14;:21;:28;;7525:1;7499:28;:25;:28;:::i;:::-;7495:1;:32;7475:294;;;7581:24;7606:1;7581:27;;;;;;;;;;;;;;;;;;7560:14;:17;;-1:-1:-1;;;;;7581:27:31;;;;7575:1;;7560:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7560:17:31;:48;7556:195;;;7656:14;7671:21;;-1:-1:-1;;7671:25:31;;;7656:41;;;;;;;;;;;;;;;;7636:14;:17;;-1:-1:-1;;;;;7656:41:31;;;;7651:1;;7636:17;;;;;;;;;;;;;;:61;;;;;-1:-1:-1;;;;;7636:61:31;;;;;-1:-1:-1;;;;;7636:61:31;;;;;;7723:5;;7556:195;7529:3;;7475:294;;;-1:-1:-1;7786:14:31;:23;;;;;-1:-1:-1;;7786:23:31;;;:::i;:::-;;7343:481;7290:3;;7233:601;;;;7883:58;7904:10;7916:24;7883:58;;;;-1:-1:-1;;;;;7883:58:31;-1:-1:-1;;;;;7883:58:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7883:58:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7987:31;7994:24;;7987:31;:::i;:::-;-1:-1:-1;8066:25:31;:33;;-1:-1:-1;;8066:33:31;;;6748:1358::o;18043:110::-;18124:22;;18043:110;:::o;23812:25::-;;;;:::o;11121:145::-;11194:7;11247:10;11230:28;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11230:28:31;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11230:28:31;;;11220:39;;;;;;11213:46;;11121:145;;;:::o;4680:659::-;1608:20;1617:10;1608:8;:20::i;:::-;:49;;;;1632:25;1646:10;1632:13;:25::i;:::-;1600:84;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;;;;4826:25;;;;;;;4818:59;;;;;-1:-1:-1;;;4818:59:31;;;;;;;;;;;;-1:-1:-1;;;4818:59:31;;;;;;;;;;;;;;;4998:39;5012:24;4998:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4998:39:31;;;;;;;;;;;;;;;;;;;;:13;:39::i;:::-;4989:5;:48;4981:96;;;;-1:-1:-1;;;4981:96:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5123:31;5130:24;;5123:31;:::i;:::-;5200:25;:33;;-1:-1:-1;;5200:33:31;;;5288:44;;;5314:10;5288:44;;;;;;;;;;;;;;;;;;;;;4680:659;:::o;2987:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2987:31:31;;-1:-1:-1;2987:31:31;:::o;21663:98::-;21738:10;:16;21663:98;:::o;3165:37::-;;;;;;;;;:::o;1778:95:24:-;1851:15;;1778:95;:::o;30711:425:31:-;30765:7;25234:11;25226:31;;;;;-1:-1:-1;;;25226:31:31;;;;;;;;;;;;-1:-1:-1;;;25226:31:31;;;;;;;;;;;;;;;1608:20;1617:10;1608:8;:20::i;:::-;:49;;;;1632:25;1646:10;1632:13;:25::i;:::-;1600:84;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;-1:-1:-1;;;1600:84:31;;;;;;;;;;;;;;;30926:37;:14;30955:7;30926:37;:28;:37;:::i;:::-;31010:7;:5;:7::i;:::-;-1:-1:-1;;;;;31010:16:31;:25;31027:7;31010:25;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31010:25:31;31088:41;31100:10;31112:7;:5;:7::i;:::-;31088:41;;;-1:-1:-1;;;;;31088:41:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30711:425;;:::o;15318:180::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1471:64:24;;;;;;;;;;;;;;;15402:40:31;:11;15434:7;15402:40;:31;:40;:::i;34422:1540::-;34505:7;34635:13;:11;:13::i;:::-;-1:-1:-1;;;;;34625:23:31;:6;-1:-1:-1;;;;;34625:23:31;;34621:68;;;-1:-1:-1;34671:7:31;34664:14;;34621:68;34721:7;-1:-1:-1;;;;;34775:20:31;;;34771:600;;34947:17;34966:12;34980:14;35004:21;35018:6;35004:13;:21::i;:::-;34944:81;;;;;;;;;;35136:9;35128:41;;;;;-1:-1:-1;;;35128:41:31;;;;;;;;;;;;-1:-1:-1;;;35128:41:31;;;;;;;;;;;;;;;35191:9;35183:28;;;;;-1:-1:-1;;;35183:28:31;;;;;;;;;;;;-1:-1:-1;;;35183:28:31;;;;;;;;;;;;;;;35328:32;35350:9;35328:17;:7;35340:4;35328:17;:11;:17;:::i;:32::-;35313:47;;34771:600;;;;35488:27;35517:22;35541:24;35575:20;:18;:20::i;:::-;35485:110;;;;;;;;;;35661:19;35653:51;;;;;-1:-1:-1;;;35653:51:31;;;;;;;;;;;;-1:-1:-1;;;35653:51:31;;;;;;;;;;;;;;;35722:19;35714:49;;;;;-1:-1:-1;;;35714:49:31;;;;;;;;;;;;-1:-1:-1;;;35714:49:31;;;;;;;;;;;;;;;35898:57;35940:14;35898:37;:12;35915:19;35898:37;:16;:37;:::i;:57::-;35891:64;34422:1540;-1:-1:-1;;;;;;;34422:1540:31:o;20894:177::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1471:64:24;;;;;;;;;;;;;;;20977:39:31;:10;21008:7;20977:39;:30;:39;:::i;17611:189::-;1479:25:24;1493:10;1479:13;:25::i;:::-;1471:64;;;;;-1:-1:-1;;;1471:64:24;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1471:64:24;;;;;;;;;;;;;;;17698:43:31;:14;17733:7;17698:43;:34;:43;:::i;8594:827::-;2086:20;2095:10;2086:8;:20::i;:::-;:51;;;-1:-1:-1;2110:10:31;2132:4;2110:27;2086:51;2078:80;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;-1:-1:-1;;;2078:80:31;;;;;;;;;;;;;;;8696:10;;3333:293;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;;;3405:204:31;3429:10;:17;3425:1;:21;3405:204;;;3476:23;3485:10;3496:1;3485:13;;;;;;;3476:23;3475:24;3467:59;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;-1:-1:-1;;;3467:59:31;;;;;;;;;;;;;;;3573:1;-1:-1:-1;;;;;3548:27:31;:10;3559:1;3548:13;;;;;;;;;;;;;;-1:-1:-1;;;;;3548:27:31;;;3540:58;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;-1:-1:-1;;;3540:58:31;;;;;;;;;;;;;;;3448:3;;3405:204;;;-1:-1:-1;8791:14:31;;;;;;;8790:15;8782:49;;;;;-1:-1:-1;;;8782:49:31;;;;;;;;;;;;-1:-1:-1;;;8782:49:31;;;;;;;;;;;;;;;8910:9;8905:384;8925:21;;;8905:384;;;9035:12;:27;9048:10;;9059:1;9048:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9048:13:31;9035:27;;-1:-1:-1;9035:27:31;;;;;;;;-1:-1:-1;9035:27:31;;;;9030:249;;9161:4;9131:12;:27;9144:10;;9155:1;9144:13;;;;;;;;;;;;;-1:-1:-1;;;;;9144:13:31;-1:-1:-1;;;;;9131:27:31;-1:-1:-1;;;;;9131:27:31;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;9230:14;9250:10;;9261:1;9250:13;;;;;;;27:10:-1;;39:1;23:18;;45:23;;-1:-1;9230:34:31;;;9250:13;9230:34;;;;;;;-1:-1:-1;;;;;;9230:34:31;-1:-1:-1;;;;;9250:13:31;;;;;;;;;;;;;9230:34;;;;;;-1:-1:-1;9030:249:31;8948:3;;8905:384;;;-1:-1:-1;9298:14:31;:21;;-1:-1:-1;;9298:21:31;;;;;9370:44;;;9387:10;9370:44;;;;;;;;;9399:14;9370:44;;;;;;;;;;9387:10;;9399:14;;9370:44;;;;;;;9399:14;;9370:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9370:44:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:1;8594:827;;:::o;18214:153::-;18315:45;;;;18214:153;:::o;27789:108::-;27848:7;27874:16;27883:6;27874:8;:16::i;4191:107:26:-;4285:6;;-1:-1:-1;;;;;4285:6:26;;;4273:18;;;;4191:107::o;13606:401:31:-;13757:35;;;;;;13756:36;13748:66;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;-1:-1:-1;;;13748:66:31;;;;;;;;;;;;;;;13883:27;13896:4;13902:7;13883:12;:27::i;:::-;-1:-1:-1;13958:35:31;;:42;;-1:-1:-1;;13958:42:31;13996:4;13958:42;;;13606:401::o;2393:158:24:-;2457:4;2492:28;2504:15;;2492:11;:28::i;:::-;-1:-1:-1;;;;;2480:54:24;;2535:8;2480:64;;;;;;;;;;;;;-1:-1:-1;;;;;2480:64:24;-1:-1:-1;;;;;2480:64:24;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2480:64:24;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2480:64:24;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2480:64:24;;2393:158;-1:-1:-1;;2393:158:24:o;2387:1891:2:-;2465:7;2526:9;:16;2546:2;2526:22;2522:72;;-1:-1:-1;2580:1:2;2564:19;;2522:72;2944:4;2929:20;;2923:27;2989:4;2974:20;;2968:27;3042:4;3027:20;;3021:27;2660:9;3013:36;3960:66;3947:79;;3943:127;;;4057:1;4042:17;;;;;;;3943:127;4084:1;:7;;4089:2;4084:7;;:18;;;;;4095:1;:7;;4100:2;4095:7;;4084:18;4080:66;;;4133:1;4118:17;;;;;;;4080:66;4247:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4247:24:2;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4247:24:2;;-1:-1:-1;;4247:24:2;;;2387:1891;-1:-1:-1;;;;;;;2387:1891:2:o;1139:237:22:-;1196:7;-1:-1:-1;;;;;1219:20:22;;;1215:155;;1262:38;;;-1:-1:-1;;;1262:38:22;;1294:4;1262:38;;;;;;-1:-1:-1;;;;;1262:23:22;;;;;:38;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;1262:38:22;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1262:38:22;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1262:38:22;;-1:-1:-1;1255:45:22;;1215:155;-1:-1:-1;1338:21:22;1331:28;;12691:240:31;12796:19;;;;12767:7;;12796:33;;12820:8;12796:33;:23;:33;:::i;:::-;12790:3;:39;12786:139;;;-1:-1:-1;12852:10:31;;12845:17;;12786:139;-1:-1:-1;12900:14:31;;;;12893:21;;14142:317;14293:35;;;;;;14285:73;;;;;-1:-1:-1;;;14285:73:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;14430:12;;;;:22;14142:317::o;4491:156:27:-;4552:4;4577:13;4598:17;4612:2;4598:13;:17::i;:::-;-1:-1:-1;4568:47:27;;4491:156;-1:-1:-1;;;;;;;;4491:156:27:o;12231:288:31:-;12367:27;12389:4;12367:21;:27::i;:::-;12430:7;12412:4;:14;;;:25;;12404:54;;;;;-1:-1:-1;;;12404:54:31;;;;;;;;;;;;-1:-1:-1;;;12404:54:31;;;;;;;;;;;;;;;12485:14;;;;:27;;12504:7;12485:27;:18;:27;:::i;:::-;12468:4;:14;;:44;;;;12231:288;;:::o;1971:165:25:-;1549:12;;2042:7;;-1:-1:-1;;;;;1549:12:25;1541:68;;;;;-1:-1:-1;;;1541:68:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:12;;2083:33;;;-1:-1:-1;;;2083:33:25;;;;;;;;;;-1:-1:-1;;;;;2087:12:25;;;;2083:26;;:33;;;;;;;;;;;;;;;2087:12;2083:33;;;5:2:-1;;;;30:1;27;20:12;5:2;2083:33:25;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2083:33:25;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2083:33:25;2068:61;;;-1:-1:-1;;;2068:61:25;;;;;;;;;;-1:-1:-1;;;;;2068:54:25;;;;;;:61;;;;;2083:33;;2068:61;;;;;;;;:54;:61;;;5:2:-1;;;;30:1;27;20:12;2189:611:5;2553:10;;;2552:62;;-1:-1:-1;2569:39:5;;;-1:-1:-1;;;2569:39:5;;2593:4;2569:39;;;;-1:-1:-1;;;;;2569:39:5;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;2569:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2569:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2569:39:5;:44;2552:62;2544:150;;;;-1:-1:-1;;;2544:150:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2730:62;;;-1:-1:-1;;;;;2730:62:5;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2730:62:5;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2704:89:5;;2723:5;;2704:18;:89::i;:::-;2189:611;;;:::o;542:413:1:-;902:20;940:8;;;542:413::o;3974:159:27:-;4036:4;4059:14;4083:17;4097:2;4083:13;:17::i;:::-;-1:-1:-1;4052:48:27;;3974:159;-1:-1:-1;;;;;;;;3974:159:27:o;1759:241::-;1861:7;1870;1912:32;1924:19;;1912:11;:32::i;:::-;-1:-1:-1;;;;;1896:76:27;;1973:12;1987:5;1896:97;;;;;;;;;;;;;-1:-1:-1;;;;;1896:97:27;-1:-1:-1;;;;;1896:97:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1896:97:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1896:97:27;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1896:97:27;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1896:97:27;;;;;;;;;;;-1:-1:-1;1759:241:27;-1:-1:-1;;;1759:241:27:o;3757:1095:5:-;4352:27;4360:5;-1:-1:-1;;;;;4352:25:5;;:27::i;:::-;4344:71;;;;;-1:-1:-1;;;4344:71:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;4486:12;4500:23;4535:5;-1:-1:-1;;;;;4527:19:5;4547:4;4527:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4527:25:5;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;4485:67:5;;;;4570:7;4562:52;;;;;-1:-1:-1;;;4562:52:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4629:17;;:21;4625:221;;4769:10;4758:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4758:30:5;4750:85;;;;-1:-1:-1;;;4750:85:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3757:1095;;;;:::o;4542:265:2:-;4741:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4741:58:2;;;;;;;4731:69;;;;;;4542:265::o;28169:128:31:-;28219:10;:12;;;;;;;;28247:43;;;28267:10;28247:43;;;;;;;;;;;;;;;;;;;;;28169:128::o;1409:498:20:-;1820:4;1864:17;1895:7;1409:498;:::o;2191:205:25:-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;-1:-1:-1;;;;;2320:21:25;;;2316:74;;2357:12;:22;;-1:-1:-1;;;;;;2357:22:25;-1:-1:-1;;;;;2357:22:25;;;;;2316:74;1268:14:20;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;1264:55;2191:205:25;;:::o;2089:236:24:-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;2228:30:24;;2224:95;;2274:15;:34;;;1268:14:20;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;2089:236:24;;:::o;3703:382:26:-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;3808:6:26;:17;;-1:-1:-1;;;;;;3808:17:26;-1:-1:-1;;;;;3808:17:26;;;-1:-1:-1;;;;3835:31:26;-1:-1:-1;;;3835:31:26;;;;;;;;;;;;;;3950:15;;;3945:77;;3986:25;;;-1:-1:-1;;;;;3986:25:26;;;;;;;;;;;;;;;3945:77;4036:42;;;4065:1;4036:42;;-1:-1:-1;;;;;4036:42:26;;;;;;;;;;;;;;;;;;;1268:14:20;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;3703:382:26;;;:::o;16884:156:31:-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;16976:57:31;;;;;;;;;;;;;;;;;17019:3;16976:57;;;;;;-1:-1:-1;16976:57:31;;;;;;;;;;;;;16962:11;:71;;;;;;;;;;;;;;;;;-1:-1:-1;;16962:71:31;;;1264:55:20;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;16884:156:31;;:::o;19430:184::-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;19514:93:31;;;;;;;;17351:10;19514:93;;;;;;;;;19593:3;19514:93;;;;;;-1:-1:-1;19514:93:31;;;;;;;;;;;;;19497:110;;;;;;;;;;;;;;;;-1:-1:-1;;19497:110:31;;;1264:55:20;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;1264:55;19430:184:31;:::o;21767:464::-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;21857:50:31;21887:19;21857:29;:50::i;:::-;21920:27;21961:20;:18;:20::i;:::-;21917:64;;;;;;;;22021:1;21999:19;:23;21991:49;;;;;-1:-1:-1;;;21991:49:31;;;;;;;;;;;;-1:-1:-1;;;21991:49:31;;;;;;;;;;;;;;;19940:5;22070:52;22050:17;:72;;;22145:79;;;;;;;;;;;;;;;;;22210:3;22145:79;;;;;;-1:-1:-1;22145:79:31;;;;;;;;;;;;;22132:10;:92;;;;;;;;;;;;;;;-1:-1:-1;;22132:92:31;;;1264:55:20;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;21767:464:31;;:::o;1274:179:6:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:6;;;1274:179::o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;3266:208:27;3324:13;3339:7;3348;3357:4;3363;3369;3375:7;3417:32;3429:19;;3417:11;:32::i;:::-;-1:-1:-1;;;;;3401:62:27;;3464:2;3401:66;;;;;;;;;;;;;-1:-1:-1;;;;;3401:66:27;-1:-1:-1;;;;;3401:66:27;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3401:66:27;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3401:66:27;;;;;;39:16:-1;36:1;17:17;2:54;101:4;3401:66:27;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:3;5:12;;2:2;;;30:1;27;20:12;2:2;3401:66:27;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;3401:66:27;;420:4:-1;411:14;;;;3401:66:27;;;;;411:14:-1;3401:66:27;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3401:66:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3401:66:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3394:73;;-1:-1:-1;3401:66:27;;-1:-1:-1;3401:66:27;;-1:-1:-1;3401:66:27;-1:-1:-1;3401:66:27;-1:-1:-1;3401:66:27;-1:-1:-1;3401:66:27;;-1:-1:-1;;;3266:208:27;;;;;;;;;:::o;1693:458:6:-;1751:7;1991:6;1987:45;;-1:-1:-1;2020:1:6;2013:8;;1987:45;2054:5;;;2058:1;2054;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2606:326;2664:7;2761:1;2757;:5;2749:44;;;;;-1:-1:-1;;;2749:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;;2606:326;-1:-1:-1;;;;2606:326:6:o;1365:367:28:-;-1:-1:-1;;;;;1509:20:28;;1505:221;;1564:27;;1546:12;;-1:-1:-1;;;;;1564:8:28;;;1579:7;;1546:12;1564:27;1546:12;1564:27;1579:7;1564:8;:27;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1545:46:28;;;1613:7;1605:39;;;;;-1:-1:-1;;;1605:39:28;;;;;;;;;;;;-1:-1:-1;;;1605:39:28;;;;;;;;;;;;;;;1505:221;;;;1675:40;-1:-1:-1;;;;;1675:26:28;;1702:3;1707:7;1675:40;:26;:40;:::i;11788:338:31:-;11973:7;11957:4;:12;;;:23;11949:70;;;;-1:-1:-1;;;11949:70:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:32;12100:4;12106;:12;;;12087;:32::i;5055:141:27:-;5101:7;5143:32;5155:19;;5143:11;:32::i;:::-;-1:-1:-1;;;;;5127:60:27;;:62;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5127:62:27;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5127:62:27;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5127:62:27;;-1:-1:-1;5055:141:27;:::o;2508:206::-;2561:13;2576:7;2585;2594:4;2600;2606;2612:7;2654:32;2666:19;;2654:11;:32::i;:::-;-1:-1:-1;;;;;2638:67:27;;:69;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2638:69:27;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2638:69:27;;;;;;39:16:-1;36:1;17:17;2:54;101:4;2638:69:27;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:3;5:12;;2:2;;;30:1;27;20:12;2:2;2638:69:27;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;2638:69:27;;420:4:-1;411:14;;;;2638:69:27;;;;;411:14:-1;2638:69:27;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2638:69:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2638:69:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:76;;2638:69;;-1:-1:-1;2638:69:27;;-1:-1:-1;2638:69:27;-1:-1:-1;2638:69:27;-1:-1:-1;2638:69:27;;-1:-1:-1;2638:69:27;;-1:-1:-1;2508:206:27;;-1:-1:-1;;;2508:206:27:o;13077:425:31:-;13211:27;13233:4;13211:21;:27::i;:::-;13303:20;;;13415:14;;;;:27;-1:-1:-1;13411:85:31;;;13475:10;;13458:14;;;:27;13077:425;;:::o;14533:370::-;14617:19;;;;:33;;14641:8;14617:33;:23;:33;:::i;:::-;14611:3;:39;14607:290;;;14733:3;14711:19;;;:25;14834:10;;14817:14;;;:27;14863:23;;;;14834:10;;14863:23;14533:370;:::o;3614:262:27:-;1024:12:20;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:20;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:20;;;;;1225:18;1213:4;1225:18;;;1170:80;3767:34:27;;3763:107;;3817:19;:42;;;1268:14:20;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:20;;;3614:262:27;;:::o;1803:173:5:-;1910:58;;;-1:-1:-1;;;;;1910:58:5;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1910:58:5;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1884:85:5;;1903:5;;1884:18;:85::i;22334:17725:31:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22334:17725:31;-1:-1:-1;;;;;22334:17725:31;;;;;;;;;;;;;;;;;;;-1:-1:-1;22334:17725:31;;;-1:-1:-1;22334:17725:31;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22334:17725:31;;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "4807600", + "executionCost": "66515", + "totalCost": "4874115" + }, + "external": { + "WALLET_VERSION()": "infinite", + "batchExecuteTransaction(bytes)": "infinite", + "bulkTransfer(address,address[])": "infinite", + "calculateHash(address[])": "infinite", + "cancelWhitelistAddition(bytes32)": "infinite", + "cancelWhitelistRemoval(bytes32)": "infinite", + "confirmGasTopUpLimitUpdate(uint256)": "infinite", + "confirmLoadLimitUpdate(uint256)": "infinite", + "confirmSpendLimitUpdate(uint256)": "infinite", + "confirmWhitelistAddition(bytes32)": "infinite", + "confirmWhitelistRemoval(bytes32)": "infinite", + "controllerNode()": "1131", + "convertToEther(address,uint256)": "infinite", + "convertToStablecoin(address,uint256)": "infinite", + "ensRegistry()": "1148", + "executeRelayedTransaction(uint256,bytes,bytes)": "infinite", + "executeTransaction(address,uint256,bytes)": "infinite", + "gasTopUpLimitAvailable()": "infinite", + "gasTopUpLimitControllerConfirmationRequired()": "1120", + "gasTopUpLimitPending()": "1066", + "gasTopUpLimitValue()": "1066", + "getBalance(address)": "infinite", + "increaseRelayNonce()": "23278", + "initializeWallet(address,bool,address,bytes32,bytes32,bytes32,uint256)": "infinite", + "isSetWhitelist()": "1088", + "isTransferable()": "1140", + "isValidSignature(bytes,bytes)": "infinite", + "isValidSignature(bytes32,bytes)": "infinite", + "licenceNode()": "1087", + "loadLimitAvailable()": "infinite", + "loadLimitControllerConfirmationRequired()": "1144", + "loadLimitPending()": "1109", + "loadLimitValue()": "1087", + "loadTokenCard(address,uint256)": "infinite", + "owner()": "1150", + "pendingWhitelistAddition()": "infinite", + "pendingWhitelistRemoval()": "infinite", + "relayNonce()": "1088", + "renounceOwnership()": "24167", + "setGasTopUpLimit(uint256)": "infinite", + "setLoadLimit(uint256)": "infinite", + "setSpendLimit(uint256)": "infinite", + "setWhitelist(address[])": "infinite", + "spendLimitAvailable()": "infinite", + "spendLimitControllerConfirmationRequired()": "1144", + "spendLimitPending()": "1091", + "spendLimitValue()": "1088", + "submitGasTopUpLimitUpdate(uint256)": "infinite", + "submitLoadLimitUpdate(uint256)": "infinite", + "submitSpendLimitUpdate(uint256)": "infinite", + "submitWhitelistAddition(address[])": "infinite", + "submitWhitelistRemoval(address[])": "infinite", + "submittedWhitelistAddition()": "1100", + "submittedWhitelistRemoval()": "1132", + "supportsInterface(bytes4)": "376", + "tokenWhitelistNode()": "1089", + "topUpGas(uint256)": "infinite", + "transfer(address,address,uint256)": "infinite", + "transferOwnership(address,bool)": "infinite", + "whitelistArray(uint256)": "2037", + "whitelistMap(address)": "1270" + }, + "internal": { + "_increaseRelayNonce()": "infinite" + } + }, + "methodIdentifiers": { + "WALLET_VERSION()": "1127b57e", + "batchExecuteTransaction(bytes)": "aaf1fc62", + "bulkTransfer(address,address[])": "1aa21fba", + "calculateHash(address[])": "cd7958dd", + "cancelWhitelistAddition(bytes32)": "100f23fd", + "cancelWhitelistRemoval(bytes32)": "ce0b5bd5", + "confirmGasTopUpLimitUpdate(uint256)": "f41c4319", + "confirmLoadLimitUpdate(uint256)": "f40b51f8", + "confirmSpendLimitUpdate(uint256)": "eadd3cea", + "confirmWhitelistAddition(bytes32)": "5adc02ab", + "confirmWhitelistRemoval(bytes32)": "cbd2ac68", + "controllerNode()": "e2b4ce97", + "convertToEther(address,uint256)": "b87e21ef", + "convertToStablecoin(address,uint256)": "f36febda", + "ensRegistry()": "7d73b231", + "executeRelayedTransaction(uint256,bytes,bytes)": "46efe0ed", + "executeTransaction(address,uint256,bytes)": "3f579f42", + "gasTopUpLimitAvailable()": "7d7d0046", + "gasTopUpLimitControllerConfirmationRequired()": "f776f518", + "gasTopUpLimitPending()": "cc0e7e56", + "gasTopUpLimitValue()": "2587a6a2", + "getBalance(address)": "f8b2cb4f", + "increaseRelayNonce()": "90e690c7", + "initializeWallet(address,bool,address,bytes32,bytes32,bytes32,uint256)": "69efdfc0", + "isSetWhitelist()": "be40ba79", + "isTransferable()": "2121dc75", + "isValidSignature(bytes,bytes)": "20c13b0b", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "licenceNode()": "747c31d6", + "loadLimitAvailable()": "1efd0299", + "loadLimitControllerConfirmationRequired()": "ab205993", + "loadLimitPending()": "c4856cd9", + "loadLimitValue()": "da84b1ed", + "loadTokenCard(address,uint256)": "3a43199f", + "owner()": "8da5cb5b", + "pendingWhitelistAddition()": "47b55a9d", + "pendingWhitelistRemoval()": "294f4025", + "relayNonce()": "cccdc556", + "renounceOwnership()": "715018a6", + "setGasTopUpLimit(uint256)": "0f3a85d8", + "setLoadLimit(uint256)": "3bfec254", + "setSpendLimit(uint256)": "3c672eb7", + "setWhitelist(address[])": "f4217648", + "spendLimitAvailable()": "5d2362a8", + "spendLimitControllerConfirmationRequired()": "bcb8b74a", + "spendLimitPending()": "027ef3eb", + "spendLimitValue()": "9b0dfd27", + "submitGasTopUpLimitUpdate(uint256)": "74624c55", + "submitLoadLimitUpdate(uint256)": "b221f316", + "submitSpendLimitUpdate(uint256)": "21ce918d", + "submitWhitelistAddition(address[])": "7fd004fa", + "submitWhitelistRemoval(address[])": "6137d670", + "submittedWhitelistAddition()": "26d05ab2", + "submittedWhitelistRemoval()": "de212bf3", + "supportsInterface(bytes4)": "01ffc9a7", + "tokenWhitelistNode()": "877337b0", + "topUpGas(uint256)": "e61c51ca", + "transfer(address,address,uint256)": "beabacc8", + "transferOwnership(address,bool)": "b242e534", + "whitelistArray(uint256)": "d251fefc", + "whitelistMap(address)": "32531c3c" + } + }, + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "AddedToWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_assets", + "type": "address[]" + } + ], + "name": "BulkTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "ExecutedRelayedTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "ExecutedTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_currentNonce", + "type": "uint256" + } + ], + "name": "IncreasedRelayNonce", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "LoadedTokenCard", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "RemovedFromWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetGasTopUpLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetLoadLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetSpendLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedGasTopUpLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedLoadLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedSpendLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "ToppedUpGas", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "Transferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "UpdatedAvailableLimit", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "WALLET_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "_transactionBatch", + "type": "bytes" + } + ], + "name": "batchExecuteTransaction", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_assets", + "type": "address[]" + } + ], + "name": "bulkTransfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "calculateHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "convertToEther", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "convertToStablecoin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "executeRelayedTransaction", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_destination", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "executeTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "increaseRelayNonce", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_owner_", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable_", + "type": "bool" + }, + { + "internalType": "address", + "name": "_ens_", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_tokenWhitelistNode_", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_controllerNode_", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_licenceNode_", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_spendLimit_", + "type": "uint256" + } + ], + "name": "initializeWallet", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isSetWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hashedData", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "licenceNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "loadTokenCard", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistAddition", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistRemoval", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "relayNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setGasTopUpLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setLoadLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setSpendLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "setWhitelist", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistAddition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistRemoval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "tokenWhitelistNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "topUpGas", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelistMap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/contracts/artifacts/Wallet_metadata.json b/contracts/artifacts/Wallet_metadata.json new file mode 100644 index 00000000..9a20137d --- /dev/null +++ b/contracts/artifacts/Wallet_metadata.json @@ -0,0 +1,2004 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "AddedToWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_assets", + "type": "address[]" + } + ], + "name": "BulkTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "CancelledWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_ensRegistry", + "type": "address" + } + ], + "name": "ENSSetRegistry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "ExecutedRelayedTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_destination", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "ExecutedTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_currentNonce", + "type": "uint256" + } + ], + "name": "IncreasedRelayNonce", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "LoadedTokenCard", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_locked", + "type": "address" + } + ], + "name": "LockedOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "RemovedFromWhitelist", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetGasTopUpLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetLoadLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SetSpendLimit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedGasTopUpLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedLoadLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "SubmittedSpendLimitUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "SubmittedWhitelistRemoval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "ToppedUpGas", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "Transferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "TransferredOwnership", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "UpdatedAvailableLimit", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "WALLET_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "_transactionBatch", + "type": "bytes" + } + ], + "name": "batchExecuteTransaction", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_assets", + "type": "address[]" + } + ], + "name": "bulkTransfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "calculateHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "cancelWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "confirmSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "confirmWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controllerNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "convertToEther", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "convertToStablecoin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "ensRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "executeRelayedTransaction", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_destination", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "executeTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "gasTopUpLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "increaseRelayNonce", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_owner_", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable_", + "type": "bool" + }, + { + "internalType": "address", + "name": "_ens_", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_tokenWhitelistNode_", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_controllerNode_", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_licenceNode_", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_spendLimit_", + "type": "uint256" + } + ], + "name": "initializeWallet", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isSetWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isTransferable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes32", + "name": "_hashedData", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "licenceNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "loadLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "loadTokenCard", + "outputs": [], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistAddition", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingWhitelistRemoval", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "relayNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setGasTopUpLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setLoadLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "setSpendLimit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "setWhitelist", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitAvailable", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitControllerConfirmationRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitPending", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "spendLimitValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitGasTopUpLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitLoadLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "submitSpendLimitUpdate", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistAddition", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "submitWhitelistRemoval", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistAddition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "submittedWhitelistRemoval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "tokenWhitelistNode", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "topUpGas", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address payable", + "name": "_account", + "type": "address" + }, + { + "internalType": "bool", + "name": "_transferable", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelistMap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "methods": { + "batchExecuteTransaction(bytes)": { + "details": "This function allows for the wallet to send a batch of transactions instead of one, it calls executeTransaction() so that the daily limit is enforced.", + "params": { + "_transactionBatch": "data encoding the transactions to be sent, following executeTransaction's format i.e. (destination, value, data)" + } + }, + "bulkTransfer(address,address[])": { + "details": "This is a bulk transfer convenience function, used to migrate contracts.", + "params": { + "_assets": "is an array of addresses of ERC20 tokens or 0x0 for ether.", + "_to": "is the recipient's address, can't be the zero (0x0) address: transfer() will revert." + } + }, + "calculateHash(address[])": { + "details": "Method used to hash our whitelist address arrays." + }, + "cancelWhitelistAddition(bytes32)": { + "details": "Cancel pending whitelist addition." + }, + "cancelWhitelistRemoval(bytes32)": { + "details": "Cancel pending removal of whitelisted addresses." + }, + "confirmGasTopUpLimitUpdate(uint256)": { + "details": "Confirm pending set top up gas limit operation." + }, + "confirmLoadLimitUpdate(uint256)": { + "details": "Confirm pending set load limit operation." + }, + "confirmSpendLimitUpdate(uint256)": { + "details": "Confirm pending set daily limit operation." + }, + "confirmWhitelistAddition(bytes32)": { + "details": "Confirm pending whitelist addition.This will only ever be applied post 2FA, by one of the Controllers", + "params": { + "_hash": "is the hash of the pending whitelist array, a form of lamport lock" + } + }, + "confirmWhitelistRemoval(bytes32)": { + "details": "Confirm pending removal of whitelisted addresses." + }, + "controllerNode()": { + "return": "the controller node registered in ENS." + }, + "convertToEther(address,uint256)": { + "details": "Convert ERC20 token amount to the corresponding ether amount.", + "params": { + "_amount": "amount of token in base units.", + "_token": "ERC20 token contract address." + } + }, + "convertToStablecoin(address,uint256)": { + "details": "Convert ether or ERC20 token amount to the corresponding stablecoin amount.", + "params": { + "_amount": "amount of token in base units.", + "_token": "ERC20 token contract address." + } + }, + "ensRegistry()": { + "return": "Current address of the ENS registry contract." + }, + "executeRelayedTransaction(uint256,bytes,bytes)": { + "details": "This function allows for the controller to relay transactions on the owner's behalf, the relayed message has to be signed by the owner.", + "params": { + "_data": "abi encoded data payload.", + "_nonce": "only used for relayed transactions, must match the wallet's relayNonce.", + "_signature": "signed prefix + data." + } + }, + "executeTransaction(address,uint256,bytes)": { + "details": "This function allows for the owner to send any transaction from the Wallet to arbitrary addresses", + "params": { + "_data": "transaction payload binary", + "_destination": "address of the transaction", + "_value": "ETH amount in wei" + } + }, + "gasTopUpLimitAvailable()": { + "details": "View your available gas top-up limit" + }, + "gasTopUpLimitControllerConfirmationRequired()": { + "details": "Has the gas top-up limit been initialised" + }, + "gasTopUpLimitPending()": { + "details": "Is there an active gas top-up limit change" + }, + "gasTopUpLimitValue()": { + "details": "View how much gas top-up has been spent already" + }, + "getBalance(address)": { + "details": "This returns the balance of the contract for any ERC20 token or ETH.", + "params": { + "_asset": "is the address of an ERC20 token or 0x0 for ETH." + } + }, + "increaseRelayNonce()": { + "details": "This allows the user to cancel a transaction that was unexpectedly delayed by the relayer" + }, + "initializeWallet(address,bool,address,bytes32,bytes32,bytes32,uint256)": { + "details": "Initializes the wallet top up limit and the vault contract.", + "params": { + "_controllerNode_": "is the ENS name node of the Controller contract.", + "_ens_": "is the address of the ENS registry.", + "_licenceNode_": "is the ENS name node of the Licence contract.", + "_owner_": "is the owner account of the wallet contract.", + "_spendLimit_": "is the initial spend limit.", + "_tokenWhitelistNode_": "is the ENS name node of the Token whitelist.", + "_transferable_": "indicates whether the contract ownership can be transferred." + } + }, + "isTransferable()": { + "return": "true if the ownership is transferable." + }, + "isValidSignature(bytes,bytes)": { + "details": "Implements EIP-1271: receives the raw data (bytes) https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1271.md", + "params": { + "_data": "Arbitrary length data signed on the behalf of address(this)", + "_signature": "Signature byte array associated with _data" + } + }, + "isValidSignature(bytes32,bytes)": { + "details": "Implements EIP-1654: receives the hashed message(bytes32) https://github.com/ethereum/EIPs/issues/1654.md", + "params": { + "_hashedData": "Hashed data signed on the behalf of address(this)", + "_signature": "Signature byte array associated with _dataHash" + } + }, + "licenceNode()": { + "return": "licence contract node registered in ENS." + }, + "loadLimitAvailable()": { + "details": "View your available load limit" + }, + "loadLimitControllerConfirmationRequired()": { + "details": "Has the load limit been initialised" + }, + "loadLimitPending()": { + "details": "Is there an active load limit change" + }, + "loadLimitValue()": { + "details": "View how much laod limit has been spent already" + }, + "loadTokenCard(address,uint256)": { + "details": "Load a token card with the specified asset amount.the amount send should be inclusive of the percent licence.", + "params": { + "_amount": "is the amount of assets to be transferred in base units.", + "_asset": "is the address of an ERC20 token or 0x0 for ether." + } + }, + "owner()": { + "return": "address of the owner." + }, + "pendingWhitelistAddition()": { + "details": "Getter for pending addition array." + }, + "pendingWhitelistRemoval()": { + "details": "Getter for pending removal array." + }, + "renounceOwnership()": { + "details": "Renouncing to ownership will leave the contract without an owner and unusable.It will not be possible to call the functions with the `onlyOwner` modifier anymore." + }, + "setGasTopUpLimit(uint256)": { + "details": "Sets the daily gas top up limit.", + "params": { + "_amount": "is the gas top up amount in wei." + } + }, + "setLoadLimit(uint256)": { + "details": "Sets a daily card load limit.", + "params": { + "_amount": "is the card load amount in current stablecoin base units." + } + }, + "setSpendLimit(uint256)": { + "details": "Sets the initial daily spend (aka transfer) limit for non-whitelisted addresses.", + "params": { + "_amount": "is the daily limit amount in wei." + } + }, + "setWhitelist(address[])": { + "details": "Add initial addresses to the whitelist.", + "params": { + "_addresses": "are the Ethereum addresses to be whitelisted." + } + }, + "spendLimitAvailable()": { + "details": "View your available limit" + }, + "spendLimitControllerConfirmationRequired()": { + "details": "Has the spend limit been initialised" + }, + "spendLimitPending()": { + "details": "Is there an active spend limit change" + }, + "spendLimitValue()": { + "details": "View how much has been spent already" + }, + "submitGasTopUpLimitUpdate(uint256)": { + "details": "Submit a daily gas top up limit update.", + "params": { + "_amount": "is the daily top up gas limit amount in wei." + } + }, + "submitLoadLimitUpdate(uint256)": { + "details": "Submit a daily load limit update.", + "params": { + "_amount": "is the daily load limit amount in wei." + } + }, + "submitSpendLimitUpdate(uint256)": { + "details": "Submit a daily transfer limit update for non-whitelisted addresses.", + "params": { + "_amount": "is the daily limit amount in wei." + } + }, + "submitWhitelistAddition(address[])": { + "details": "Add addresses to the whitelist.", + "params": { + "_addresses": "are the Ethereum addresses to be whitelisted." + } + }, + "submitWhitelistRemoval(address[])": { + "details": "Remove addresses from the whitelist.", + "params": { + "_addresses": "are the Ethereum addresses to be removed." + } + }, + "supportsInterface(bytes4)": { + "details": "Checks for interface support based on ERC165." + }, + "tokenWhitelistNode()": { + "return": "TokenWhitelist's node registered in ENS." + }, + "topUpGas(uint256)": { + "details": "Refill owner's gas balance, revert if the transaction amount is too large", + "params": { + "_amount": "is the amount of ether to transfer to the owner account in wei." + } + }, + "transfer(address,address,uint256)": { + "details": "Transfers the specified asset to the recipient's address.", + "params": { + "_amount": "is the amount of assets to be transferred in base units.", + "_asset": "is the address of an ERC20 token or 0x0 for ether.", + "_to": "is the recipient's address." + } + }, + "transferOwnership(address,bool)": { + "params": { + "_account": "address to transfer ownership to.", + "_transferable": "indicates whether to keep the ownership transferable." + } + } + }, + "title": "Asset wallet with extra security features, gas top up management and card integration." + }, + "userdoc": { + "methods": { + "bulkTransfer(address,address[])": { + "notice": "If any of the transfers fail, this will revert." + }, + "isTransferable()": { + "notice": "check if the ownership is transferable." + }, + "owner()": { + "notice": "Find out owner address" + }, + "renounceOwnership()": { + "notice": "Allows the current owner to relinquish control of the contract." + }, + "tokenWhitelistNode()": { + "notice": "This shows what TokenWhitelist is being used" + }, + "transferOwnership(address,bool)": { + "notice": "Allows the current owner to transfer control of the contract to a new address." + } + } + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": "Wallet" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/controller.sol": { + "keccak256": "0xb68e6d7092e8e9b3a914aea22172dce9c26dfa9805ba819958b5b8dde7dfd50f", + "urls": [ + "bzz-raw://a1cdba6a1bfc923815b2c1116327c1951ecf40ea8c67ae2456e1c4c50217eb61", + "dweb:/ipfs/QmX4rCEuMEBg6X3cpKdjTtxgNYBrCJyyA51KRR8vbE6sDF" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ECDSA.sol": { + "keccak256": "0xfc3dde0661847b56e4ff8926be7e4cde9d960cbe18480e01ee648cfbf5d4055a", + "urls": [ + "bzz-raw://d8747b09cbf2ee6d96d21a990fcf326f08084c79fcfad5ed331d64b5705487d9", + "dweb:/ipfs/QmPsy6pKdNtGndw5PMRAXEQ8pVKEMuLvAbgxffZ9cXL4T1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC165.sol": { + "keccak256": "0xaca91baae00478feaafaedff2fc8ebd3d6738c7877ad78d9565ef328f683f4e8", + "urls": [ + "bzz-raw://c55b05166c731d830498a2dd576c6b19ba114e73eb5011dc684f368cb84c5216", + "dweb:/ipfs/QmVyYr64yP1aqFvhBSZeJtzMaPdLyF9w8pytudogFWKtur" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ERC20.sol": { + "keccak256": "0x54628c1175e0e40ff56df85e92bd9b4e5ee1614600713379ff885bd07f6ef010", + "urls": [ + "bzz-raw://2a0a4531eb59752b7c3315f3c796d2ce2befb0d21eca1908eb94f44873e458de", + "dweb:/ipfs/QmbrqZGUQZaSpYndb9eQ9WVEeboRBHaomma91tpD4ESWeE" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeERC20.sol": { + "keccak256": "0xa654c1247c418db9eb3034e5b795760d2048864625f509a0e81632351e4199c0", + "urls": [ + "bzz-raw://3798f03a8e74dcf0c90072c3f88ccc8be887b9fd9707b063e4c47df0a610478b", + "dweb:/ipfs/QmSaY9ZKzihx5GC3h9XiUmBpQbwhRQw93yasRqxp45cXBJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/SafeMath.sol": { + "keccak256": "0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690", + "urls": [ + "bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610", + "dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENS.sol": { + "keccak256": "0x5d115f126a237cfccc6c687301f87bf3210b7f68594ef780d796caa6e72d6060", + "urls": [ + "bzz-raw://6ca3f8dbd17933dd487c532fcfddc42ec7b46f7ccc84cfcb266cbf8bf453758c", + "dweb:/ipfs/QmcrckQwvrffFdSgrC5txQw5xNruAVtkDQ2aj9V1MtVwKD" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ENSBytesUtils.sol": { + "keccak256": "0xe9599418173f34cc89c737059f398ba9a9f5e8a44c67af218bb3373c589f3499", + "urls": [ + "bzz-raw://b20acd1d67c676364e862f4cecdcfc4ade3efc22445fb6fda4a801f6d865bde1", + "dweb:/ipfs/QmW2EP3T1y6kLtfB2rZFhqFBFWzUthvC1DZWzTfVLehPsy" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/PublicResolver.sol": { + "keccak256": "0xdc5767dd5f4c192c3085e89bcc3ab791ab4e3e082f03bfdca1e48f75a0ce72aa", + "urls": [ + "bzz-raw://d4cd247165490f08c6903e99dd86f8a6d279763b0a79660e544a7b8ae0e071dd", + "dweb:/ipfs/QmRyepaRuSLF8QNkV5QSwoTtc6BjX3Kr7KP8GQuCtWp1MH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/RRUtils.sol": { + "keccak256": "0x7be2b14a352eda9d632f2969e8ae00e6e2bf8cb286a0e1d9c3fb2af0b9d2d799", + "urls": [ + "bzz-raw://df3a4d1fb8e19407921d1dfe3a1b8029eb4dd7321f8dc66e16bb97590ce6ff3b", + "dweb:/ipfs/QmV2UTNqJAhiAGBYjUMZYuvvWpj43WC3VpZivmW3LSpfdc" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/ResolverBase.sol": { + "keccak256": "0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8", + "urls": [ + "bzz-raw://dc477afd53175b96112bb0e2e25ce85b1f7c0e3fe0da4a2e8539d86712583b00", + "dweb:/ipfs/QmQdwwHEcNMxTWtkrNpkbxtokwiFDdQ5xwPYcuZPRbJQKp" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ABIResolver.sol": { + "keccak256": "0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f", + "urls": [ + "bzz-raw://3668c3ec6be58cf6bbbe2cfcb8e286927fa5ab028d501c8b26d2eeb816ce7303", + "dweb:/ipfs/Qme7RMhhcFxa1xzhJz24s3rdW2VePsPdJhFgQbAiieMjKz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/AddrResolver.sol": { + "keccak256": "0x4d6a95626f02bfc6e5ee75cde2a38e67e9eb9aada78473e05b7003ebd60d8ffb", + "urls": [ + "bzz-raw://45407b2f99a29d0cc3df3636ecc5316414d6eb855860e382dffa57329886d74a", + "dweb:/ipfs/QmaKTuaHdy7ADgPY718fsiwjn2Hd6dqxPtgRcwjNxtdunG" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/ContentHashResolver.sol": { + "keccak256": "0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc", + "urls": [ + "bzz-raw://a30f83bbf8d55051bdc0b151131e5dca4966fe87f36648f9bf3e580d81d85fa2", + "dweb:/ipfs/QmbWeakvTkEJTRxqFL6wZPDdN6Wqq1tSgCJiu861UbH3yH" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/DNSResolver.sol": { + "keccak256": "0x348116b6a303561102f057b89ce14b1bdc5a254c701380cdb1c682adf7e0f749", + "urls": [ + "bzz-raw://8cc58072164c74bf520a061918c422554097134f74854f0b3e1093ba36798f24", + "dweb:/ipfs/QmSsDaHZSjjNZVzbmkxhAKNkjpWMKtMKEVh9cLbskW4NJn" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/InterfaceResolver.sol": { + "keccak256": "0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41", + "urls": [ + "bzz-raw://7b3af5c29db8d4c13631b3ec427e5dc6dee1a5df0560d36b32deda2451e4bc11", + "dweb:/ipfs/QmXe2sWt31kEELa4VPU84QUUK6UDw6mQANc9gMVezoqioP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/NameResolver.sol": { + "keccak256": "0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16", + "urls": [ + "bzz-raw://ab5b2748d4297385b92a83aafdc79fc343842ee71e9537fa9c8cf4d2fbd4aeb0", + "dweb:/ipfs/QmZzZYyiRxZU271QDKhL4F4VdCfx5dZq4fT9Ud786XtiZz" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/PubkeyResolver.sol": { + "keccak256": "0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a", + "urls": [ + "bzz-raw://3ee3cbb2cca361819cea208485c718a3288cf9dc22762bb08c3dc445b60dc862", + "dweb:/ipfs/QmeXyPzZHyPMSHvQPDsCtjdC3rMCTzZNWeYXaWqiDbdmSt" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/ens/profiles/TextResolver.sol": { + "keccak256": "0xdfb11cd7e9aef793d88c517195a6d3ac4736aa2aa7f27baafc2541bb2c639774", + "urls": [ + "bzz-raw://84b3d3a186a91c242a729be0da2ad1b705a332472cea0c81d81d4b8e309f3440", + "dweb:/ipfs/QmQTKAyoS6DEUUNVKb5aECk3GBGb7AZNGSV4untv1ZNngi" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/initializable.sol": { + "keccak256": "0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721", + "urls": [ + "bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f", + "dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/strings.sol": { + "keccak256": "0xd7c99d0733e73dc27cba285890b254d36d070807da9e60a573dcc4b5ec3c6f3d", + "urls": [ + "bzz-raw://95845b2178b081aa0ad872f04694fd87f9553d0f78b8e079ce98773dbafc9033", + "dweb:/ipfs/QmPsNebBo51KzdM7ewAPJ5weCL7J5Piy2y1Hgcto2TmvDP" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/balanceable.sol": { + "keccak256": "0x5a1c23a4b3afdad849f0639bac47e8c08c1949f0aa531113e06883f9a7ab6662", + "urls": [ + "bzz-raw://a9e6c391948533011c757d89a67cdcc6a741afa7e1c242138c591594d3a3238c", + "dweb:/ipfs/QmfPoN9Dv2AuPBcY1nAdByMAuW1Z7Wj4CnRW3KnRLtiuQM" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/bytesUtils.sol": { + "keccak256": "0x4ea4f266580ca57be6ec7b0d2fe6adb0bf51f978648c3aa65e8d02fe91351522", + "urls": [ + "bzz-raw://b3badb0e0c1dd6b21249852eb2b8fcdd2adffb2aa663926b51241d8eb06d2857", + "dweb:/ipfs/QmRvKPafRARyjdq5duZwx55cxUL4Vi8qvXo5HmQDt5Sq3s" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/controllable.sol": { + "keccak256": "0x8245bddc77a7c5b44dc7f285404193e47b951e9cbba12a765828cb3023f64336", + "urls": [ + "bzz-raw://df426810c455bccd40f5976a2906382e35800fe47e45a1991b4c3684827dd5ad", + "dweb:/ipfs/QmfMrmV9xYTy6NfFnWR4Y29qRzgU8wmiNjkbnYoFUw8YK6" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ensResolvable.sol": { + "keccak256": "0xddb1c7898472491906ebfa73b4c83f8bc946ff3e94e5c8814fe6ea063f3fb665", + "urls": [ + "bzz-raw://7911bc8eb24a89b0eb0e088de4399083af7b2761cce12cd622db715e46994897", + "dweb:/ipfs/QmTz3SyAoGFDopiJuFRES7x155hNFWLF6d9yctJhdNx9m5" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/ownable.sol": { + "keccak256": "0x42429c64258acf6e8018aca4fb048760aba8c26e8256d7b7b93be6d542ad8726", + "urls": [ + "bzz-raw://d617ddff648eaffe0b13519b85c1405ed4b57c3a5329d2c950f06485b0f730a3", + "dweb:/ipfs/QmdgX3w1b5psWWEQzRRQ1j2Ej7NNQC1bWxc95YJJFay9f1" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/tokenWhitelistable.sol": { + "keccak256": "0x6f0e7922c0be342960f7d3ff610ea3e6e46aa76e1f73f1ff6a529e352532f0a8", + "urls": [ + "bzz-raw://024bf0b3b2df1c5af6cfcd2aa6f281b98b48408b32ac400246a629e539e81ffe", + "dweb:/ipfs/QmNMb6C7a9pzcU7Gu48RBMcV3L3CitpjPiGC3zvNe9wnMj" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/internals/transferrable.sol": { + "keccak256": "0x5f215d0f4f446f068e3948a7b5cf4dd621f4e9c4ba45047b95c4b7ad4c02765d", + "urls": [ + "bzz-raw://cda044581d476790ed11a5f8fb7ccc978e30b8649efa0132f0c701cdf30c2cb0", + "dweb:/ipfs/QmR4oKPAQyfV3wCtsuqT5V2D3BZvsgxV5Wufn5vtAH5ZkJ" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/licence.sol": { + "keccak256": "0x6adf2a5bc0e6bb1b53ce1a7085b7e10573d8ca6297f5f34e606ccaa4b3079a1c", + "urls": [ + "bzz-raw://d90d7cd882d355a1aec7d88c1bfe8eed85ee30b8ff7f101f7ef1fb4501e700c1", + "dweb:/ipfs/Qmdz8Fzpj9cE8msmcBUEP18KLfrjnvSdFjDf9yxAcCt1KY" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/tokenWhitelist.sol": { + "keccak256": "0x560b9284f40382c95ab64856a7acfd53eb416593053a40cf9f6fe229e08372a0", + "urls": [ + "bzz-raw://e2a217afa376bcb0d901937b52995a33f3ea16dff7e76691b20e761802e4a14b", + "dweb:/ipfs/QmZJhPn8zTtBBE2RQvWLA7FzGLsdbxDcRkMCKiyCw6ypQr" + ] + }, + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/wallet.sol": { + "keccak256": "0xdb84a948b1cd2f957eb445c541bf7689209c34dbab08ebce9faa0ddfb4aeb47b", + "urls": [ + "bzz-raw://bda80e1f7779ce8582edf170ec8b4d568e1a1f9ab0e171708f39afc0c272e1b3", + "dweb:/ipfs/QmNyeVpgs7ii3bGNbrM1B1yCz1Xs4DwcWKp8DgUm9vz241" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/externals/artifacts/Address.json b/contracts/externals/artifacts/Address.json new file mode 100644 index 00000000..86a50e72 --- /dev/null +++ b/contracts/externals/artifacts/Address.json @@ -0,0 +1,58 @@ +{ + "deploy": { + "VM:-": { + "linkReferences": {}, + "autoDeployLib": true + }, + "main:1": { + "linkReferences": {}, + "autoDeployLib": true + }, + "ropsten:3": { + "linkReferences": {}, + "autoDeployLib": true + }, + "rinkeby:4": { + "linkReferences": {}, + "autoDeployLib": true + }, + "kovan:42": { + "linkReferences": {}, + "autoDeployLib": true + }, + "görli:5": { + "linkReferences": {}, + "autoDeployLib": true + }, + "Custom": { + "linkReferences": {}, + "autoDeployLib": true + } + }, + "data": { + "bytecode": { + "linkReferences": {}, + "object": "60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158209096f075c6cddc51ee46e58c6d5ad315f2732a0cde088eef3ce696961792e2a764736f6c63430005110032", + "opcodes": "PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP1 SWAP7 CREATE PUSH22 0xC6CDDC51EE46E58C6D5AD315F2732A0CDE088EEF3CE6 SWAP7 SWAP7 OR SWAP3 0xE2 0xA7 PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "94:863:0:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158209096f075c6cddc51ee46e58c6d5ad315f2732a0cde088eef3ce696961792e2a764736f6c63430005110032", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP1 SWAP7 CREATE PUSH22 0xC6CDDC51EE46E58C6D5AD315F2732A0CDE088EEF3CE6 SWAP7 SWAP7 OR SWAP3 0xE2 0xA7 PUSH5 0x736F6C6343 STOP SDIV GT STOP ORIGIN ", + "sourceMap": "94:863:0:-;;;;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "17000", + "executionCost": "94", + "totalCost": "17094" + }, + "internal": { + "isContract(address)": "infinite" + } + }, + "methodIdentifiers": {} + }, + "abi": [] +} \ No newline at end of file diff --git a/contracts/externals/artifacts/Address_metadata.json b/contracts/externals/artifacts/Address_metadata.json new file mode 100644 index 00000000..f1b64c66 --- /dev/null +++ b/contracts/externals/artifacts/Address_metadata.json @@ -0,0 +1,38 @@ +{ + "compiler": { + "version": "0.5.17+commit.d19bba13" + }, + "language": "Solidity", + "output": { + "abi": [], + "devdoc": { + "details": "Collection of functions related to the address type,", + "methods": {} + }, + "userdoc": { + "methods": {} + } + }, + "settings": { + "compilationTarget": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": "Address" + }, + "evmVersion": "istanbul", + "libraries": {}, + "optimizer": { + "enabled": true, + "runs": 200 + }, + "remappings": [] + }, + "sources": { + "localhost/../../../../../System/Volumes/Data/Users/riccardopersiani/Monolith/workspace/contracts/contracts/externals/Address.sol": { + "keccak256": "0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1", + "urls": [ + "bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf", + "dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3" + ] + } + }, + "version": 1 +} \ No newline at end of file diff --git a/contracts/internals/controllable.sol b/contracts/internals/controllable.sol index 5838e9e0..c28a111f 100644 --- a/contracts/internals/controllable.sol +++ b/contracts/internals/controllable.sol @@ -35,13 +35,13 @@ contract Controllable is ENSResolvable { /// @notice Checks if message sender is a controller. modifier onlyController() { - require(_isController(msg.sender), "sender is not a controller"); + require(_isController(msg.sender), "sender is not controller"); _; } /// @notice Checks if message sender is an admin. modifier onlyAdmin() { - require(_isAdmin(msg.sender), "sender is not an admin"); + require(_isAdmin(msg.sender), "sender is not admin"); _; } diff --git a/contracts/internals/date.sol b/contracts/internals/date.sol index dcfc0b44..d9e160e1 100644 --- a/contracts/internals/date.sol +++ b/contracts/internals/date.sol @@ -20,7 +20,7 @@ pragma solidity ^0.6.11; -/// @title Date provides redimentary date parsing functionality. +/// @title Date provides rudimentary date parsing functionality. /// @notice This method parses months found in an ISO date to a number contract Date { bytes32 private constant _JANUARY = keccak256("Jan"); diff --git a/contracts/internals/ensResolvable.sol b/contracts/internals/ensResolvable.sol index 8bfca90d..f8c35fc1 100644 --- a/contracts/internals/ensResolvable.sol +++ b/contracts/internals/ensResolvable.sol @@ -30,7 +30,7 @@ contract ENSResolvable is Initializable { /// @dev Address of the ENS registry contract set to the default ENS registry address. address private _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e); - /// @notice Checks if the contract has been initialized succesfully i.e. the ENS registry has been set. + /// @notice Checks if the contract has been initialized successfully i.e. the ENS registry has been set. modifier initialized() { require(_ensRegistry != address(0), "ENSResolvable not initialized"); _; diff --git a/contracts/internals/gasRefundable.sol b/contracts/internals/gasRefundable.sol index a1f9954d..3b43b3ae 100644 --- a/contracts/internals/gasRefundable.sol +++ b/contracts/internals/gasRefundable.sol @@ -33,7 +33,7 @@ contract GasRefundable { /// @dev Address of the gas token used to refund gas (default: CHI). IGasToken private _gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c); - /// @dev Gas token parameters parameters used in the gas refund calcualtion (default: CHI). + /// @dev Gas token parameters parameters used in the gas refund calculation (default: CHI). GasTokenParameters private _gasTokenParameters = GasTokenParameters({freeCallGasCost: 14154, gasRefundPerUnit: 41130}); /// @notice Refunds gas based on the amount of gas spent in the transaction and the gas token parameters. diff --git a/contracts/internals/ownable.sol b/contracts/internals/ownable.sol index d70dd6b2..1746bb23 100644 --- a/contracts/internals/ownable.sol +++ b/contracts/internals/ownable.sol @@ -23,7 +23,7 @@ pragma solidity ^0.6.11; import "../externals/initializable.sol"; /// @title Ownable has an owner address and provides basic authorization control functions. -/// This contract is modified version of the MIT OpenZepplin Ownable contract +/// This contract is modified version of the MIT OpenZeppelin Ownable contract /// This contract allows for the transferOwnership operation to be made impossible /// https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol contract Ownable is Initializable { @@ -35,7 +35,7 @@ contract Ownable is Initializable { /// @notice Reverts if called by any account other than the owner. modifier onlyOwner() { - require(_isOwner(msg.sender), "sender is not an owner"); + require(_isOwner(msg.sender), "sender is not owner"); _; } diff --git a/contracts/licence.sol b/contracts/licence.sol index 3c6a25a9..06123f6d 100644 --- a/contracts/licence.sol +++ b/contracts/licence.sol @@ -26,7 +26,7 @@ import "./internals/controllable.sol"; import "./internals/ensResolvable.sol"; import "./internals/transferrable.sol"; -/// @title Licence loads the TokenCard and transfers the licence amout to the TKN Holder Contract. +/// @title Licence loads the TokenCard and transfers the licence amount to the TKN Holder Contract. /// @dev the rest of the amount gets sent to the CryptoFloat contract Licence is Transferrable, ENSResolvable, Controllable { using SafeMath for uint256; @@ -155,7 +155,7 @@ contract Licence is Transferrable, ENSResolvable, Controllable { _lockedTKNContractAddress = true; } - /// @dev Updates the address of the cyptoFloat. + /// @dev Updates the address of the cryptoFloat. /// @param _newFloat This is the new address for the CryptoFloat function updateFloat(address payable _newFloat) external onlyAdmin { require(!floatLocked(), "float is locked"); diff --git a/contracts/oracle.sol b/contracts/oracle.sol index efa6b4cc..93296349 100644 --- a/contracts/oracle.sol +++ b/contracts/oracle.sol @@ -83,7 +83,7 @@ contract Oracle is ENSResolvable, Base64, Date, Controllable, ParseIntScientific emit SetCryptoComparePublicKey(msg.sender, _publicKey); } - /// @dev Verifiy the provided origin proof and update token's rate. + /// @dev Verify the provided origin proof and update token's rate. /// @param _token the address of the token to be updated. /// @param _result query result in JSON format. /// @param _proof origin proof from CryptoCompare. diff --git a/contracts/tokenWhitelist.sol b/contracts/tokenWhitelist.sol index 30608bc1..94abe765 100644 --- a/contracts/tokenWhitelist.sol +++ b/contracts/tokenWhitelist.sol @@ -65,7 +65,7 @@ contract TokenWhitelist is ENSResolvable, Controllable, Transferrable { mapping(address => Token) private _tokenInfoMap; - // @notice specifies whitelisted methodIds for protected tokens in wallet's excuteTranaction() e.g. keccak256(transfer(address,uint256)) => 0xa9059cbb + // @notice specifies whitelisted methodIds for protected tokens in wallet's executeTransaction() e.g. keccak256(transfer(address,uint256)) => 0xa9059cbb mapping(bytes4 => bool) private _methodIdWhitelist; address[] private _tokenAddressArray; @@ -83,7 +83,7 @@ contract TokenWhitelist is ENSResolvable, Controllable, Transferrable { /// @param _ens_ is the ENS registry address. /// @param _oracleNode_ is the ENS node of the Oracle. /// @param _controllerNode_ is our Controllers node. - /// @param _stablecoinAddress_ is the address of the stablecoint used by the wallet for the card load limit. + /// @param _stablecoinAddress_ is the address of the stablecoin used by the wallet for the card load limit. constructor( address _ens_, bytes32 _oracleNode_, @@ -207,7 +207,7 @@ contract TokenWhitelist is ENSResolvable, Controllable, Transferrable { } else { //transfer or approve // 4 (signature) + 32(address) + 32(uint) - require(_data.length >= 4 + 32 + 32, "not enough data for transfer/appprove"); + require(_data.length >= 4 + 32 + 32, "not enough data for transfer/approve"); return (_data._bytesToAddress(4 + 12), _data._bytesToUint256(4 + 32)); } } diff --git a/contracts/wallet.sol b/contracts/wallet.sol index 73e73ee1..1c97fcfe 100644 --- a/contracts/wallet.sol +++ b/contracts/wallet.sol @@ -9,11 +9,11 @@ * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ // SPDX-License-Identifier: GPLv3 @@ -35,31 +35,88 @@ import "./internals/ownable.sol"; import "./internals/tokenWhitelistable.sol"; import "./internals/transferrable.sol"; -/// @title ControllableOwnable combines Controllable and Ownable -/// @dev providing an additional modifier to check if Owner or Controller -contract ControllableOwnable is Controllable, Ownable { - /// @dev Check if the sender is the Owner or one of the Controllers - modifier onlyOwnerOrController() { - require(_isOwner(msg.sender) || _isController(msg.sender), "only owner||controller"); +/// @title OptOutableMonolith2FA is used a configurable 2FA. +/// @dev This provides the various modifiers and utility functions needed for 2FA. +/// @dev 2FA is needed to confirm changes to the security settings in the wallet. +contract OptOutableMonolith2FA is Controllable, Ownable { + event SetPersonal2FA(address _sender, address _p2FA); + event SetMonolith2FA(address _sender); + + /// @dev for accessing wallet in privileged mode. + bool public privileged; + bool public monolith2FA; + address public personal2FA; + + function _initialize2FA() internal initializer { + monolith2FA = true; + } + + // @dev This modifier ensures that a method is only accessible to 2nd factor + modifier only2FA() { + if (monolith2FA) { + require(_isController(msg.sender), "sender is not a Monolith 2FA"); + } else { + require(msg.sender == personal2FA, "sender is not personal 2FA account"); + } _; } + + /// @dev Check if the sender is the Owner or 2FA + modifier onlyOwnerOr2FA() { + require(_isOwner(msg.sender) || _is2FA(msg.sender), "only owner or 2FA"); + _; + } + + /// @dev set Monolith to be the 2FA + function setMonolith2FA() external onlyOwner { + require(!monolith2FA, "monolith2FA already enabled"); + monolith2FA = true; + personal2FA = address(0); + emit SetMonolith2FA(msg.sender); + } + + /// @dev set personal 2FA to the address the user provided, needs to be called by a privileged relayed Tx + function setPersonal2FA(address _p2FA) external onlyOwner { + //require(privileged, "Setting a personal 2FA requires privileged mode"); + require(_p2FA != address(0), "2FA cannot be set to zero"); + require(_p2FA != personal2FA, "address already set"); + require(_p2FA != address(this), "2FA cannot be the wallet address"); + personal2FA = _p2FA; + monolith2FA = false; + emit SetPersonal2FA(msg.sender, _p2FA); + } + + /// @dev utility function to check whether or not an address is valid 2FA'er + function _is2FA(address _sender) private view returns (bool) { + if (monolith2FA) { + return _isController(_sender); + } else { + return (_sender == personal2FA); + } + } } /// @title SelfCallableOwnable allows either owner or the contract itself to call its functions /// @dev providing an additional modifier to check if Owner or self is calling /// @dev the "self" here is used for the meta transactions contract SelfCallableOwnable is Ownable { + /// @dev Check if the sender is the Owner or self + modifier onlySelf() { + require(msg.sender == address(this), "not self"); + _; + } + /// @dev Check if the sender is the Owner or self modifier onlyOwnerOrSelf() { - require(_isOwner(msg.sender) || msg.sender == address(this), "only owner||self"); + require(_isOwner(msg.sender) || msg.sender == address(this), "Not owner or self"); _; } } /// @title AddressWhitelist provides payee-whitelist functionality. /// @dev This contract will allow the user to maintain a whitelist of addresses -/// @dev These addresses will live outside of the various spend limits -contract AddressWhitelist is ControllableOwnable, SelfCallableOwnable { +/// @dev These addresses will live outside of the daily limit +contract AddressWhitelist is OptOutableMonolith2FA, SelfCallableOwnable { using SafeMath for uint256; event AddedToWhitelist(address _sender, address[] _addresses); @@ -89,12 +146,12 @@ contract AddressWhitelist is ControllableOwnable, SelfCallableOwnable { /// @dev Check that neither addition nor removal operations have already been submitted. modifier noActiveSubmission() { - require(!submittedWhitelistAddition && !submittedWhitelistRemoval, "whitelist sumbission pending"); + require(!submittedWhitelistAddition && !submittedWhitelistRemoval, "whitelist submission pending"); _; } /// @dev Cancel pending whitelist addition. - function cancelWhitelistAddition(bytes32 _hash) external onlyOwnerOrController { + function cancelWhitelistAddition(bytes32 _hash) external onlyOwnerOr2FA { // Check if operation has been submitted. require(submittedWhitelistAddition, "no pending submission"); // Require that confirmation hash and the hash of the pending whitelist addition match @@ -108,7 +165,7 @@ contract AddressWhitelist is ControllableOwnable, SelfCallableOwnable { } /// @dev Cancel pending removal of whitelisted addresses. - function cancelWhitelistRemoval(bytes32 _hash) external onlyOwnerOrController { + function cancelWhitelistRemoval(bytes32 _hash) external onlyOwnerOr2FA { // Check if operation has been submitted. require(submittedWhitelistRemoval, "no pending submission"); // Require that confirmation hash and the hash of the pending whitelist removal match @@ -123,8 +180,8 @@ contract AddressWhitelist is ControllableOwnable, SelfCallableOwnable { /// @dev Confirm pending whitelist addition. /// @dev This will only ever be applied post 2FA, by one of the Controllers - /// @param _hash is the hash of the pending whitelist array, a form of lamport lock - function confirmWhitelistAddition(bytes32 _hash) external onlyController { + /// @param _hash is the hash of the pending whitelist array, a form of Lamport's lock + function confirmWhitelistAddition(bytes32 _hash) external only2FA { // Require that the whitelist addition has been submitted. require(submittedWhitelistAddition, "no pending submission"); // Require that confirmation hash and the hash of the pending whitelist addition match @@ -147,7 +204,7 @@ contract AddressWhitelist is ControllableOwnable, SelfCallableOwnable { } /// @dev Confirm pending removal of whitelisted addresses. - function confirmWhitelistRemoval(bytes32 _hash) external onlyController { + function confirmWhitelistRemoval(bytes32 _hash) external only2FA { // Require that the pending whitelist is not empty and the operation has been submitted. require(submittedWhitelistRemoval, "no pending submission"); // Require that confirmation hash and the hash of the pending whitelist removal match @@ -240,278 +297,165 @@ contract AddressWhitelist is ControllableOwnable, SelfCallableOwnable { } } -/// @title DailyLimitTrait This trait allows for daily limits to be included in other contracts. -/// This contract will allow for a DailyLimit object to be instantiated and used. -library DailyLimitTrait { +/// @title DailyLimit provides daily limit functionality +contract DailyLimit is OptOutableMonolith2FA, SelfCallableOwnable, TokenWhitelistable { using SafeMath for uint256; - event UpdatedAvailableLimit(); + event InitializedDailyLimit(uint256 _amount, uint256 _nextReset); + event SetDailyLimit(address _sender, uint256 _amount); + event SubmittedDailyLimitUpdate(uint256 _amount); + event UpdatedAvailableDailyLimit(uint256 _amount, uint256 _nextReset); - struct DailyLimit { - uint256 value; - uint256 available; - uint256 limitTimestamp; - uint256 pending; - bool controllerConfirmationRequired; + uint256 private _dailyLimit; // The daily limit amount. + uint256 private _available; // The remaining amount available for spending in the current 24-hour window. + uint256 private _pendingLimit; // The pending new limit value requested in the latest limit update submission. + uint256 private _resetTimestamp; // Denotes the future timestamp when the available daily limit is due to reset again. + + // @dev This initializes the daily spend limit using the stablecoin defined in the tokenWhitelist + // @param _limit is base units of the stablecoin defined in the tokenWhitelist + // @param _tokenWhitelistNode is the node that points to our tokenWhitelist + function _initializeDailyLimit(uint256 _limit, bytes32 _tokenWhitelistNode) internal initializer { + _initializeTokenWhitelistable(_tokenWhitelistNode); + (, uint256 stablecoinMagnitude, , , , , ) = _getStablecoinInfo(); + require(stablecoinMagnitude > 0, "no stablecoin"); + uint256 limitBaseUnits = _limit * stablecoinMagnitude; + _dailyLimit = limitBaseUnits; + _available = limitBaseUnits; + _pendingLimit = limitBaseUnits; + _resetTimestamp = now.add(24 hours); + emit InitializedDailyLimit(limitBaseUnits, _resetTimestamp); } /// @dev Confirm pending set daily limit operation. - function _confirmLimitUpdate(DailyLimit storage self, uint256 _amount) internal { - // Require that pending and confirmed spend limit are the same - require(self.pending == _amount, "confirmed/submitted limit mismatch"); - // Modify spend limit based on the pending value. - _modifyLimit(self, self.pending); + function confirmDailyLimitUpdate(uint256 _amount) external only2FA { + // Require that pending and confirmed limits are the same. + require(_pendingLimit == _amount, "confirmed or submitted limit mismatch"); + // The new limit should be always higher then the current one otherwise no 2FA would be needed + // this is done to avoid abuse e.g. resetting the current daily limit and thus resetting the available amount + require(_amount > _dailyLimit, "limit should be greater than current one"); + // Increase the available amount... + _available = _amount; + // ...and reset the 24-hour window + _resetTimestamp = now.add(24 hours); + emit UpdatedAvailableDailyLimit(_available, _resetTimestamp); + // Set daily limit based on the pending value. + _setLimit(_pendingLimit); } - /// @dev Use up amount within the daily limit. Will fail if amount is larger than daily limit. - function _enforceLimit(DailyLimit storage self, uint256 _amount) internal { - // Account for the spend limit daily reset. - _updateAvailableLimit(self); - require(self.available >= _amount, "available self.limitTimestamp.add(24 hours)) { - return self.value; - } else { - return self.available; - } + /// @dev Get the daily limit value. + function dailyLimitValue() external view returns (uint256) { + return _dailyLimit; } - /// @dev Modify the spend limit and spend available based on the provided value. - /// @dev _amount is the daily limit amount in wei. - function _modifyLimit(DailyLimit storage self, uint256 _amount) private { - // Account for the spend limit daily reset. - _updateAvailableLimit(self); - // Set the daily limit to the provided amount. - self.value = _amount; - // Lower the available limit if it's higher than the new daily limit. - if (self.available > self.value) { - self.available = self.value; + /// @dev Returns the available daily limit/balance, accounts for daily limit reset. + /// @return amount of available to spend within the current day in base units. + function dailyLimitAvailable() external view returns (uint256) { + if (now > _resetTimestamp) { + return _dailyLimit; + } else { + return _available; } } - /// @dev Set the daily limit. - /// @param _amount is the daily limit amount in base units. - function _setLimit(DailyLimit storage self, uint256 _amount) internal { - // Require that the spend limit has not been set yet. - require(!self.controllerConfirmationRequired, "limit already set"); - // Modify spend limit based on the provided value. - _modifyLimit(self, _amount); - // Flag the operation as set. - self.controllerConfirmationRequired = true; - } - - /// @dev Submit a daily limit update, needs to be confirmed. - /// @param _amount is the daily limit amount in base units. - function _submitLimitUpdate(DailyLimit storage self, uint256 _amount) internal { - // Require that the spend limit has been set. - require(self.controllerConfirmationRequired, "limit hasn't been set yet"); + /// @dev Submit a daily transfer limit update for non-whitelisted addresses. + /// @param _amount is the daily limit amount in stablecoin base units. + function submitDailyLimitUpdate(uint256 _amount) external onlyOwnerOrSelf { // Assign the provided amount to pending daily limit. - self.pending = _amount; - } - - /// @dev Update available spend limit based on the daily reset. - function _updateAvailableLimit(DailyLimit storage self) private { - if (now > self.limitTimestamp.add(24 hours)) { - // Update the current timestamp. - self.limitTimestamp = now; - // Set the available limit to the current spend limit. - self.available = self.value; - emit UpdatedAvailableLimit(); + _pendingLimit = _amount; + // If the new limit is lower, then there is no need for 2FA. + if (_amount <= _dailyLimit) { + // Decrease the available amount if the new limit is lower than it + if (_amount < _available) { + _available = _amount; + emit UpdatedAvailableDailyLimit(_available, _resetTimestamp); + } + _setLimit(_amount); + } else { + emit SubmittedDailyLimitUpdate(_amount); } } -} -/// @title it provides daily spend limit functionality. -contract SpendLimit is ControllableOwnable, SelfCallableOwnable { - event SetSpendLimit(address _sender, uint256 _amount); - event SubmittedSpendLimitUpdate(uint256 _amount); - - using DailyLimitTrait for DailyLimitTrait.DailyLimit; - - DailyLimitTrait.DailyLimit internal _spendLimit; - - /// @dev Confirm pending set daily limit operation. - function confirmSpendLimitUpdate(uint256 _amount) external onlyController { - _spendLimit._confirmLimitUpdate(_amount); - emit SetSpendLimit(msg.sender, _amount); - } - - /// @dev Sets the initial daily spend (aka transfer) limit for non-whitelisted addresses. - /// @param _amount is the daily limit amount in wei. - function setSpendLimit(uint256 _amount) external onlyOwnerOrSelf { - _spendLimit._setLimit(_amount); - emit SetSpendLimit(msg.sender, _amount); - } - - /// @dev View your available limit - function spendLimitAvailable() external view returns (uint256) { - return _spendLimit._getAvailableLimit(); - } - - /// @dev Is there an active spend limit change - function spendLimitPending() external view returns (uint256) { - return _spendLimit.pending; - } - - /// @dev Has the spend limit been initialised - function spendLimitControllerConfirmationRequired() external view returns (bool) { - return _spendLimit.controllerConfirmationRequired; - } - - /// @dev View how much has been spent already - function spendLimitValue() external view returns (uint256) { - return _spendLimit.value; - } - - /// @dev Submit a daily transfer limit update for non-whitelisted addresses. - /// @param _amount is the daily limit amount in wei. - function submitSpendLimitUpdate(uint256 _amount) external onlyOwnerOrSelf { - _spendLimit._submitLimitUpdate(_amount); - emit SubmittedSpendLimitUpdate(_amount); - } - - /// @dev Initializes the daily spend limit in wei. - function _initializeSpendLimit(uint256 _limit) internal initializer { - _spendLimit = DailyLimitTrait.DailyLimit(_limit, _limit, now, 0, false); - } -} - -/// @title GasTopUpLimit provides daily limit functionality. -contract GasTopUpLimit is ControllableOwnable, SelfCallableOwnable { - event SetGasTopUpLimit(address _sender, uint256 _amount); - event SubmittedGasTopUpLimitUpdate(uint256 _amount); - - uint256 private constant _MAXIMUM_GAS_TOPUP_LIMIT = 500 finney; - uint256 private constant _MINIMUM_GAS_TOPUP_LIMIT = 1 finney; - - using DailyLimitTrait for DailyLimitTrait.DailyLimit; - - DailyLimitTrait.DailyLimit internal _gasTopUpLimit; - - /// @dev Confirm pending set top up gas limit operation. - function confirmGasTopUpLimitUpdate(uint256 _amount) external onlyController { - _gasTopUpLimit._confirmLimitUpdate(_amount); - emit SetGasTopUpLimit(msg.sender, _amount); - } - - /// @dev View your available gas top-up limit - function gasTopUpLimitAvailable() external view returns (uint256) { - return _gasTopUpLimit._getAvailableLimit(); - } - - /// @dev Is there an active gas top-up limit change - function gasTopUpLimitPending() external view returns (uint256) { - return _gasTopUpLimit.pending; - } - - /// @dev Has the gas top-up limit been initialised - function gasTopUpLimitControllerConfirmationRequired() external view returns (bool) { - return _gasTopUpLimit.controllerConfirmationRequired; - } - - /// @dev View how much gas top-up has been spent already - function gasTopUpLimitValue() external view returns (uint256) { - return _gasTopUpLimit.value; - } - - /// @dev Sets the daily gas top up limit. - /// @param _amount is the gas top up amount in wei. - function setGasTopUpLimit(uint256 _amount) external onlyOwnerOrSelf { - require(_MINIMUM_GAS_TOPUP_LIMIT <= _amount && _amount <= _MAXIMUM_GAS_TOPUP_LIMIT, "out of range top-up"); - _gasTopUpLimit._setLimit(_amount); - emit SetGasTopUpLimit(msg.sender, _amount); - } - - /// @dev Submit a daily gas top up limit update. - /// @param _amount is the daily top up gas limit amount in wei. - function submitGasTopUpLimitUpdate(uint256 _amount) external onlyOwnerOrSelf { - require(_MINIMUM_GAS_TOPUP_LIMIT <= _amount && _amount <= _MAXIMUM_GAS_TOPUP_LIMIT, "out of range top-up"); - _gasTopUpLimit._submitLimitUpdate(_amount); - emit SubmittedGasTopUpLimitUpdate(_amount); - } - - /// @dev Initializes the daily gas topup limit in wei. - function _initializeGasTopUpLimit() internal initializer { - _gasTopUpLimit = DailyLimitTrait.DailyLimit(_MAXIMUM_GAS_TOPUP_LIMIT, _MAXIMUM_GAS_TOPUP_LIMIT, now, 0, false); - } -} - -/// @title LoadLimit provides daily load limit functionality. -contract LoadLimit is ControllableOwnable, SelfCallableOwnable, TokenWhitelistable { - event SetLoadLimit(address _sender, uint256 _amount); - event SubmittedLoadLimitUpdate(uint256 _amount); - - uint256 private constant _MAXIMUM_STABLECOIN_LOAD_LIMIT = 10000; // USD - uint256 private _maximumLoadLimit; - - using DailyLimitTrait for DailyLimitTrait.DailyLimit; - - DailyLimitTrait.DailyLimit internal _loadLimit; - - /// @dev Sets a daily card load limit. - /// @param _amount is the card load amount in current stablecoin base units. - function setLoadLimit(uint256 _amount) external onlyOwnerOrSelf { - require(_amount <= _maximumLoadLimit, "out of range load amount"); - _loadLimit._setLimit(_amount); - emit SetLoadLimit(msg.sender, _amount); - } + /// @dev Use up amount within the daily limit. Will fail if amount is larger than available limit. + function _enforceDailyLimit(address _asset, uint256 _amount) internal { + // Convert token amount to stablecoin value. + uint256 stablecoinValue = convertToStablecoin(_asset, _amount); - /// @dev Submit a daily load limit update. - /// @param _amount is the daily load limit amount in wei. - function submitLoadLimitUpdate(uint256 _amount) external onlyOwnerOrSelf { - require(_amount <= _maximumLoadLimit, "out of range load amount"); - _loadLimit._submitLimitUpdate(_amount); - emit SubmittedLoadLimitUpdate(_amount); + // Account for the limit daily reset. + _updateAvailableDailyLimit(); + require(_available >= stablecoinValue, "available smaller than amount"); + _available = _available.sub(stablecoinValue); + emit UpdatedAvailableDailyLimit(_available, _resetTimestamp); } - /// @dev Confirm pending set load limit operation. - function confirmLoadLimitUpdate(uint256 _amount) external onlyController { - _loadLimit._confirmLimitUpdate(_amount); - emit SetLoadLimit(msg.sender, _amount); + /// @dev Modify the daily and available limits based on the provided value. + /// @dev _amount is the daily limit amount in stablecoin base units. + function _setLimit(uint256 _amount) private { + // Set the daily limit to the provided amount. + _dailyLimit = _amount; + emit SetDailyLimit(msg.sender, _dailyLimit); } - /// @dev View your available load limit - function loadLimitAvailable() external view returns (uint256) { - return _loadLimit._getAvailableLimit(); + /// @dev Update available limit based on the daily reset. + function _updateAvailableDailyLimit() private { + if (now > _resetTimestamp) { + // Update the current timestamp. + _resetTimestamp = now.add(24 hours); + // Set the available limit to the current daily limit. + _available = _dailyLimit; + emit UpdatedAvailableDailyLimit(_available, _resetTimestamp); + } } - /// @dev Is there an active load limit change - function loadLimitPending() external view returns (uint256) { - return _loadLimit.pending; - } + /// @dev Convert ether or ERC20 token amount to the corresponding stablecoin amount. + /// @param _token ERC20 token contract address. + /// @param _amount amount of token in base units. + /// @return the equivalent amount in stablecoin base units & 0 if the token is not available. + function convertToStablecoin(address _token, uint256 _amount) public view returns (uint256) { + // avoid the unnecessary calculations if the token to be loaded is the stablecoin itself + if (_token == _stablecoin()) { + return _amount; + } - /// @dev Has the load limit been initialised - function loadLimitControllerConfirmationRequired() external view returns (bool) { - return _loadLimit.controllerConfirmationRequired; - } + uint256 amountToSend = _amount; - /// @dev View how much laod limit has been spent already - function loadLimitValue() external view returns (uint256) { - return _loadLimit.value; - } + // convert token amount to ETH first (0x0 represents ether) + if (_token != address(0)) { + // Store the token in memory to save map entry lookup gas. + (, uint256 magnitude, uint256 rate, bool available, , , ) = _getTokenInfo(_token); - function _initializeLoadLimit(bytes32 _tokenWhitelistNode) internal initializer { - _initializeTokenWhitelistable(_tokenWhitelistNode); - (, uint256 stablecoinMagnitude, , , , , ) = _getStablecoinInfo(); - require(stablecoinMagnitude > 0, "no stablecoin"); - _maximumLoadLimit = _MAXIMUM_STABLECOIN_LOAD_LIMIT * stablecoinMagnitude; - _loadLimit = DailyLimitTrait.DailyLimit(_maximumLoadLimit, _maximumLoadLimit, now, 0, false); + // if the token does NOT exist in the whitelist then return 0 + if (!available) { + return 0; + } + // if it exists then require that its rate is not zero. + require(rate != 0, "rate=0"); + // Safely convert the token amount to ether based on the exchange rate. + amountToSend = _amount.mul(rate).div(magnitude); + } + // _amountToSend now is in ether + // Get the stablecoin's magnitude and its current rate. + (, uint256 stablecoinMagnitude, uint256 stablecoinRate, bool stablecoinAvailable, , , ) = _getStablecoinInfo(); + // Check if the stablecoin rate is set. + require(stablecoinAvailable, "token not available"); + require(stablecoinRate != 0, "stablecoin rate=0"); + // Safely convert the token amount to stablecoin based on its exchange rate and the stablecoin exchange rate. + return amountToSend.mul(stablecoinMagnitude).div(stablecoinRate); } } /// @title Asset wallet with extra security features, gas top up management and card integration. -contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, LoadLimit, IERC165, Transferrable, Balanceable { +contract Wallet is ENSResolvable, AddressWhitelist, DailyLimit, IERC165, Transferrable, Balanceable { using Address for address; using ECDSA for bytes32; using SafeERC20 for IERC20; using SafeMath for uint256; - event ExecutedRelayedTransaction(bytes _data, bytes _returnData); + event ExecutedRelayedTransaction(bytes _data, bytes _returnData, bool _privileged); event ExecutedTransaction(address _destination, uint256 _value, bytes _data, bytes _returnData); event IncreasedRelayNonce(address _sender, uint256 _currentNonce); event LoadedTokenCard(address _asset, uint256 _amount); @@ -542,7 +486,7 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L /// @param _tokenWhitelistNode_ is the ENS name node of the Token whitelist. /// @param _controllerNode_ is the ENS name node of the Controller contract. /// @param _licenceNode_ is the ENS name node of the Licence contract. - /// @param _spendLimit_ is the initial spend limit. + /// @param _dailyLimit_ is the initial daily limit. function initializeWallet( address payable _owner_, bool _transferable_, @@ -550,14 +494,13 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, - uint256 _spendLimit_ + uint256 _dailyLimit_ ) external initializer { + _initialize2FA(); _initializeENSResolvable(_ens_); _initializeControllable(_controllerNode_); _initializeOwnable(_owner_, _transferable_); - _initializeSpendLimit(_spendLimit_); - _initializeGasTopUpLimit(); - _initializeLoadLimit(_tokenWhitelistNode_); + _initializeDailyLimit(_dailyLimit_, _tokenWhitelistNode_); _licenceNode = _licenceNode_; } @@ -567,16 +510,35 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L _; } + /// Meta-transaction + function executeRelayedTransaction( + uint256 _nonce, + bytes calldata _data, + bytes calldata _signature + ) external onlyController { + return _executeRelayedTransaction(_nonce, _data, _signature, false); + } + + /// Privileged functionality + function executePrivilegedRelayedTransaction( + uint256 _nonce, + bytes calldata _data, + bytes calldata _signature + ) external only2FA { + return _executeRelayedTransaction(_nonce, _data, _signature, true); + } + /// @dev This function allows for the controller to relay transactions on the owner's behalf, /// the relayed message has to be signed by the owner. /// @param _nonce only used for relayed transactions, must match the wallet's relayNonce. /// @param _data abi encoded data payload. /// @param _signature signed prefix + data. - function executeRelayedTransaction( + function _executeRelayedTransaction( uint256 _nonce, bytes calldata _data, - bytes calldata _signature - ) external onlyController { + bytes calldata _signature, + bool _privileged + ) private { // Expecting prefixed data ("monolith:") indicating relayed transaction... // ...and an Ethereum Signed Message to protect user from signing an actual Tx uint256 id; @@ -590,11 +552,12 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L require(_nonce == relayNonce, "tx replay"); _increaseRelayNonce(); - // invoke wallet function with an external call - (bool success, bytes memory returnData) = address(this).call(_data); - require(success, string(returnData)); + // TO DO: an "if(_privileged) {privileged = _privileged} should be less expensive + privileged = _privileged; + batchExecuteTransaction(_data); + privileged = false; - emit ExecutedRelayedTransaction(_data, returnData); + emit ExecutedRelayedTransaction(_data, "", _privileged); } /// @dev This returns the balance of the contract for any ERC20 token or ETH. @@ -638,10 +601,8 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L function loadTokenCard(address _asset, uint256 _amount) external payable onlyOwnerOrSelf { // check if token is allowed to be used for loading the card require(_isTokenLoadable(_asset), "token not loadable"); - // Convert token amount to stablecoin value. - uint256 stablecoinValue = convertToStablecoin(_asset, _amount); // Check against the daily spent limit and update accordingly, require that the value is under remaining limit. - _loadLimit._enforceLimit(stablecoinValue); + _enforceDailyLimit(_asset, _amount); // Get the TKN licenceAddress from ENS address licenceAddress = _ensResolve(_licenceNode); if (_asset != address(0)) { @@ -661,11 +622,11 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L /// @dev Refill owner's gas balance, revert if the transaction amount is too large /// @param _amount is the amount of ether to transfer to the owner account in wei. - function topUpGas(uint256 _amount) external isNotZero(_amount) onlyOwnerOrController { + function topUpGas(uint256 _amount) external isNotZero(_amount) onlyOwnerOr2FA { // Check contract balance is sufficient for the operation require(address(this).balance > _amount, "balance not sufficient"); // Check against the daily spent limit and update accordingly, require that the value is under remaining limit. - _gasTopUpLimit._enforceLimit(_amount); + _enforceDailyLimit(address(0), _amount); // Then perform the transfer owner().transfer(_amount); // Emit the gas top up event. @@ -676,25 +637,25 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L /// it calls executeTransaction() so that the daily limit is enforced. /// @param _transactionBatch data encoding the transactions to be sent, /// following executeTransaction's format i.e. (destination, value, data) - function batchExecuteTransaction(bytes memory _transactionBatch) public onlyOwnerOrSelf { + function batchExecuteTransaction(bytes memory _transactionBatch) public onlyOwnerOr2FA { uint256 batchLength = _transactionBatch.length + 32; // because the pos starts from 32 uint256 remainingBytesLength = _transactionBatch.length; // remaining bytes to be processed uint256 pos = 32; //the first 32 bytes denote the byte array length, start from actual data address destination; // destination address - uint256 value; // trasanction value - uint256 dataLength; // externall call data length + uint256 value; // transaction value + uint256 dataLength; // external call data length bytes memory data; // call data while (pos < batchLength) { - // there should always be at least 84 bytes remaining: the minimun #bytes required to encode a Tx + // there should always be at least 84 bytes remaining: the minimum #bytes required to encode a Tx remainingBytesLength = remainingBytesLength.sub(84); assembly { // shift right by 96 bits (256 - 160) to get the destination address (and zero the excessive bytes) destination := shr(96, mload(add(_transactionBatch, pos))) - // get value: pos + 20 bytes (destinnation address) + // get value: pos + 20 bytes (destination address) value := mload(add(_transactionBatch, add(pos, 20))) - // get data: pos + 20 (destination address) + 32 (value) bytes + // get data: pos + 20 (destination address) + 32 (value) bytes // the first 32 bytes denote the byte array length dataLength := mload(add(_transactionBatch, add(pos, 52))) data := add(_transactionBatch, add(pos, 52)) @@ -713,52 +674,6 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L } } - /// @dev Convert ERC20 token amount to the corresponding ether amount. - /// @param _token ERC20 token contract address. - /// @param _amount amount of token in base units. - function convertToEther(address _token, uint256 _amount) public view returns (uint256) { - // Store the token in memory to save map entry lookup gas. - (, uint256 magnitude, uint256 rate, bool available, , , ) = _getTokenInfo(_token); - // If the token exists require that its rate is not zero. - if (available) { - require(rate != 0, "rate=0"); - // Safely convert the token amount to ether based on the exchange rate. - return _amount.mul(rate).div(magnitude); - } - return 0; - } - - /// @dev Convert ether or ERC20 token amount to the corresponding stablecoin amount. - /// @param _token ERC20 token contract address. - /// @param _amount amount of token in base units. - function convertToStablecoin(address _token, uint256 _amount) public view returns (uint256) { - // avoid the unnecessary calculations if the token to be loaded is the stablecoin itself - if (_token == _stablecoin()) { - return _amount; - } - uint256 amountToSend = _amount; - - // 0x0 represents ether - if (_token != address(0)) { - // convert to eth first, same as convertToEther() - // Store the token in memory to save map entry lookup gas. - (, uint256 magnitude, uint256 rate, bool available, , , ) = _getTokenInfo(_token); - // require that token both exists in the whitelist and its rate is not zero. - require(available, "token not available"); - require(rate != 0, "rate=0"); - // Safely convert the token amount to ether based on the exchangeonly rate. - amountToSend = _amount.mul(rate).div(magnitude); - } - // _amountToSend now is in ether - // Get the stablecoin's magnitude and its current rate. - (, uint256 stablecoinMagnitude, uint256 stablecoinRate, bool stablecoinAvailable, , , ) = _getStablecoinInfo(); - // Check if the stablecoin rate is set. - require(stablecoinAvailable, "token not available"); - require(stablecoinRate != 0, "stablecoin rate=0"); - // Safely convert the token amount to stablecoin based on its exchange rate and the stablecoin exchange rate. - return amountToSend.mul(stablecoinMagnitude).div(stablecoinRate); - } - /// @dev This function allows for the owner to send any transaction from the Wallet to arbitrary addresses /// @param _destination address of the transaction /// @param _value ETH amount in wei @@ -767,23 +682,25 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L address _destination, uint256 _value, bytes memory _data - ) public onlyOwnerOrSelf returns (bytes memory) { + ) public onlyOwnerOr2FA returns (bytes memory) { // If value is send across as a part of this executeTransaction, this will be sent to any payable // destination. As a result enforceLimit if destination is not whitelisted. - if (!whitelistMap[_destination]) { - _spendLimit._enforceLimit(_value); + if (!whitelistMap[_destination] && !privileged) { + // enforce daily limit, 0x0 denotes ETH. + _enforceDailyLimit(address(0), _value); } + // Check if the destination is a Contract and it is one of our supported tokens if (address(_destination).isContract() && _isTokenAvailable(_destination)) { // to is the recipient's address and amount is the value to be transferred address to; uint256 amount; (to, amount) = _getERC20RecipientAndAmount(_destination, _data); - if (!whitelistMap[to]) { + if (!whitelistMap[to] && !privileged) { + // Convert token amount to stablecoin value. // If the address (of the token contract, e.g) is not in the TokenWhitelist used by the convert method - // then etherValue will be zero - uint256 etherValue = convertToEther(_destination, amount); - _spendLimit._enforceLimit(etherValue); + // ...then stablecoinValue will be zero + _enforceDailyLimit(_destination, amount); } // use callOptionalReturn provided in SafeERC20 in case the ERC20 method // returns false instead of reverting! @@ -828,16 +745,11 @@ contract Wallet is ENSResolvable, AddressWhitelist, SpendLimit, GasTopUpLimit, L require(_to != address(0), "destination=0"); // If address is not whitelisted, take daily limit into account. - if (!whitelistMap[_to]) { - // initialize ether value in case the asset is ETH - uint256 etherValue = _amount; - // Convert token amount to ether value if asset is an ERC20 token. - if (_asset != address(0)) { - etherValue = convertToEther(_asset, _amount); - } - // Check against the daily spent limit and update accordingly - // Check against the daily spent limit and update accordingly, require that the value is under remaining limit. - _spendLimit._enforceLimit(etherValue); + if (!whitelistMap[_to] && !privileged) { + // Convert token amount to stablecoin value. + // If the address (of the token contract) is not in the TokenWhitelist used by the convert method... + // ...then stablecoinValue will be zero + _enforceDailyLimit(_asset, _amount); } // Transfer token or ether based on the provided address. _safeTransfer(_to, _asset, _amount); diff --git a/contracts/walletCache.sol b/contracts/walletCache.sol index 5421c383..0da43cf1 100644 --- a/contracts/walletCache.sol +++ b/contracts/walletCache.sol @@ -25,7 +25,7 @@ import "./interfaces/IWallet.sol"; import "./internals/controllable.sol"; import "./internals/ensResolvable.sol"; -/// @title IWalletCache interface describes a method for poping an already cached wallet +/// @title IWalletCache interface describes a method for popping an already cached wallet interface IWalletCache { function walletCachePop() external returns (address payable); } @@ -48,7 +48,7 @@ contract WalletCache is ENSResolvable, Controllable { bytes32 public walletDeployerNode = _DEFAULT_WALLET_DEPLOYER_NODE; address public walletImplementation; - uint256 public defaultSpendLimit; + uint256 public defaultDailyLimit; // in stablecoin absolute value, not base units. (Example: 10k USD) address payable[] public cachedWallets; @@ -57,7 +57,7 @@ contract WalletCache is ENSResolvable, Controllable { constructor( address _walletImplementation_, address _ens_, - uint256 _defaultSpendLimit_, + uint256 _defaultDailyLimit_, bytes32 _controllerNode_, bytes32 _licenceNode_, bytes32 _tokenWhitelistNode_, @@ -66,7 +66,7 @@ contract WalletCache is ENSResolvable, Controllable { _initializeENSResolvable(_ens_); _initializeControllable(_controllerNode_); walletImplementation = _walletImplementation_; - defaultSpendLimit = _defaultSpendLimit_; + defaultDailyLimit = _defaultDailyLimit_; // Set licenceNode or use default if (_licenceNode_ != bytes32(0)) { @@ -115,7 +115,7 @@ contract WalletCache is ENSResolvable, Controllable { tokenWhitelistNode, controllerNode(), licenceNode, - defaultSpendLimit + defaultDailyLimit ); cachedWallets.push(wallet); diff --git a/contracts/walletDeployer.sol b/contracts/walletDeployer.sol index 80d80754..8db880d0 100644 --- a/contracts/walletDeployer.sol +++ b/contracts/walletDeployer.sol @@ -66,19 +66,14 @@ contract WalletDeployer is ENSResolvable, Controllable { /// @notice This function is used to migrate an owner's security settings from a previous version of the wallet /// @param _owner is the owner address for the new Wallet to be - /// @param _spendLimit is the user's set daily spend limit - /// @param _gasTopUpLimit is the user's set daily gas top-up limit + /// @param _dailyLimit is the user's set daily limit /// @param _whitelistedAddresses is the set of the user's whitelisted addresses function migrateWallet( address payable _owner, address payable _oldWallet, - bool _initializedSpendLimit, - bool _initializedGasTopUpLimit, - bool _initializedLoadLimit, + bool _initializedDailyLimit, bool _initializedWhitelist, - uint256 _spendLimit, - uint256 _gasTopUpLimit, - uint256 _loadLimit, + uint256 _dailyLimit, address[] calldata _whitelistedAddresses ) external payable onlyController { require(deployedWallets[_owner] == address(0), "wallet already deployed for owner"); @@ -90,14 +85,8 @@ contract WalletDeployer is ENSResolvable, Controllable { deployedWallets[_owner] = wallet; // Sets up the security settings as per the _oldWallet - if (_initializedSpendLimit) { - Wallet(wallet).setSpendLimit(_spendLimit); - } - if (_initializedGasTopUpLimit) { - Wallet(wallet).setGasTopUpLimit(_gasTopUpLimit); - } - if (_initializedLoadLimit) { - Wallet(wallet).setLoadLimit(_loadLimit); + if (_initializedDailyLimit) { + Wallet(wallet).submitDailyLimitUpdate(_dailyLimit); } if (_initializedWhitelist) { Wallet(wallet).setWhitelist(_whitelistedAddresses); diff --git a/go.mod b/go.mod index 9818abce..22e4ee5d 100644 --- a/go.mod +++ b/go.mod @@ -5,11 +5,14 @@ require ( github.com/elastic/gosigar v0.10.5 // indirect github.com/ethereum/go-ethereum v1.9.12 github.com/gorilla/websocket v1.4.1 // indirect - github.com/onsi/ginkgo v1.7.0 - github.com/onsi/gomega v1.4.3 + github.com/nxadm/tail v1.4.5 // indirect + github.com/onsi/ginkgo v1.14.2 + github.com/onsi/gomega v1.10.3 github.com/pkg/errors v0.8.1 + github.com/tokencard/contracts/v2 v2.3.1 github.com/tokencard/ethertest v0.9.1-0.20200731114835-9cf371a9ab63 - golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 + golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf // indirect ) go 1.14 diff --git a/go.sum b/go.sum index 0107f443..24f6ed64 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,7 @@ github.com/VictoriaMetrics/fastcache v1.5.3 h1:2odJnXLbFZcoV9KYtQ+7TH1UOq3dn3Ass github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/allegro/bigcache v1.1.1-0.20190116153254-84a0ff3f153c/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= @@ -60,6 +61,9 @@ github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVV github.com/elastic/gosigar v0.10.4/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= github.com/elastic/gosigar v0.10.5 h1:GzPQ+78RaAb4J63unidA/JavQRKrB6s8IOzN6Ib59jo= github.com/elastic/gosigar v0.10.5/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/ethereum/go-ethereum v1.8.17/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= +github.com/ethereum/go-ethereum v1.9.2/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= +github.com/ethereum/go-ethereum v1.9.9/go.mod h1:a9TqabFudpDu1nucId+k9S8R9whYaHnGBLKFouA5EAo= github.com/ethereum/go-ethereum v1.9.12 h1:EPtimwsp/KGDSiXcNunzsI4kefdsMHZGJntKx3fvbaI= github.com/ethereum/go-ethereum v1.9.12/go.mod h1:PvsVkQmhZFx92Y+h2ylythYlheEDt/uBgFbl61Js/jo= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -68,6 +72,8 @@ github.com/fjl/memsize v0.0.0-20180929194037-2a09253e352a h1:1znxn4+q2MrEdTk1eCk github.com/fjl/memsize v0.0.0-20180929194037-2a09253e352a/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= @@ -78,16 +84,28 @@ github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dT github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c h1:zqAKixg3cTcIasAMJV+EcfVbWwLpOZ7LeoWJvcuD/5Q= github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -101,12 +119,15 @@ github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOo github.com/huin/goupnp v0.0.0-20180415215157-1395d1447324 h1:PV190X5/DzQ/tbFFG5YpT5mH6q+cHlfgqI5JuRnH9oE= github.com/huin/goupnp v0.0.0-20180415215157-1395d1447324/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/karalabe/hid v0.0.0-20180420081245-2b4488a37358/go.mod h1:YvbcH+3Wo6XPs9nkgTY3u19KXLauXW+J5nB7hEHuX0A= +github.com/karalabe/usb v0.0.0-20190819132248-550797b1cad8/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM52clh5rGzTKpVctGT1lH4Dc8Jw= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -120,10 +141,12 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/logrusorgru/aurora v0.0.0-20180419164547-d694e6f975a9 h1:KQdwUNlTDGyS6e+2rjAxfHSpBFIOHXqgDceNDqb55+4= github.com/logrusorgru/aurora v0.0.0-20180419164547-d694e6f975a9/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0 h1:v2XXALHHh6zHfYTJ+cSkwtyffnaOyR1MXaA91mTrb8o= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035 h1:USWjF42jDCSEeikX/G1g40ZWnsPXN5WkZ4jMHZWyBK4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -135,15 +158,29 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.5 h1:obHEce3upls1IBn1gTw/o7bCv7OJb6Ib/o7wNO+4eKw= +github.com/nxadm/tail v1.4.5/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20180912035003-be2c049b30cc/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c h1:1RHs3tNxjXGHeul8z2t6H2N2TlAqpKe5yryJztRx4Jk= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M= +github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709 h1:zNBQb37RGLmJybyMcs983HfUfpkw9OTFD9tbBfAViHE= @@ -168,6 +205,7 @@ github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSg github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= +github.com/robertkrimen/otto v0.0.0-20170205013659-6a77b7cbc37d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.5.0 h1:dgSHE6+ia18arGOTIYQKKGWLvEbGvmbNE6NfxhoNHUY= github.com/rs/cors v1.5.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -190,8 +228,15 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/goleveldb v0.0.0-20180815032940-ae2bd5eed72d/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/tokencard/contracts v1.5.8 h1:hUlZFRCEQiGMFS9NP6ze1BMXOLOJT4tKc58iRIXSRFQ= +github.com/tokencard/contracts v1.5.8/go.mod h1:DwcbZ4CUlM1hVY5Y7jsXbCIuST/sCeDYLxUUANdb0C4= +github.com/tokencard/contracts/v2 v2.3.1 h1:OSYOBbvaY98MOz17L72ah0gF1II/jsHf/LI5Zy2JPt0= +github.com/tokencard/contracts/v2 v2.3.1/go.mod h1:bRCoTwF0y2MHBr/OuXRKf3s66sMxxzzV8dNx2pZiwSM= +github.com/tokencard/ethertest v0.7.0/go.mod h1:c+qKrL1Tg3Dg0/lEOnmX/WB9Rv/mitm6ueAn9Ge8UKQ= +github.com/tokencard/ethertest v0.8.1/go.mod h1:1GTnshKUCoZACOuj+ak3oc5L6DIfxM+P8Nefml8eA3I= github.com/tokencard/ethertest v0.9.1-0.20200731114835-9cf371a9ab63 h1:5tNtJj5yBOiuCcbnhzpb+0MLlYeTQHerZ6+vSr3+fzg= github.com/tokencard/ethertest v0.9.1-0.20200731114835-9cf371a9ab63/go.mod h1:NGTJ8DcKF7l+b+mU7YykHhv/pckChUW6zrogmx78pSo= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= @@ -201,32 +246,65 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180927165925-5295e8364332/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7 h1:AeiKBIuRw3UomYXSbLy0Mc2dDLfdtbT/IVn4keq83P0= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0 h1:wBouT66WTYFXdxfVdz9sVWARVd/2vfGcmI45D2gj45M= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180928133829-e4b3c5e90611/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf h1:kt3wY1Lu5MJAnKTfoMR52Cu4gwvna4VTzNOiT8tY73s= +golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= @@ -236,6 +314,7 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= @@ -243,4 +322,7 @@ gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHO gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= diff --git a/pkg/bindings/controller.go b/pkg/bindings/controller.go index 2aedfcaa..f2d31850 100644 --- a/pkg/bindings/controller.go +++ b/pkg/bindings/controller.go @@ -31,7 +31,7 @@ var ( const ControllerABI = "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_ownerAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"AddedAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"AddedController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_locked\",\"type\":\"address\"}],\"name\":\"LockedOwnership\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"RemovedAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"RemovedController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"Started\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"Stopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"TransferredOwnership\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"adminCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"isController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isStopped\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stop\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_transferable\",\"type\":\"bool\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // ControllerBin is the compiled bytecode used for deploying new contracts. -var ControllerBin = "0x60806040523480156200001157600080fd5b506040516200179e3803806200179e833981810160405260208110156200003757600080fd5b5051620000468160006200004d565b50620001bc565b600054610100900460ff168062000069575062000069620001b6565b8062000078575060005460ff16155b620000b55760405162461bcd60e51b815260040180806020018281038252602e81526020018062001770602e913960400191505060405180910390fd5b600054610100900460ff16158015620000e1576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0385161760ff60a01b1916600160a01b8415158102919091179182905560ff9104166200015a57604080516001600160a01b038516815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b60408051600081526001600160a01b038516602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a18015620001b1576000805461ff00191690555b505050565b303b1590565b6115a480620001cc6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063b242e53411610066578063b242e5341461024f578063b429afeb1461027d578063be9a6555146102a3578063f6a74ed7146102ab57610100565b8063715018a6146101c75780638da5cb5b146101cf578063996cba68146101f3578063a7fc7a071461022957610100565b806324d7806c116100d357806324d7806c1461016b5780632b7832b3146101915780633f683b6a1461019957806370480275146101a157610100565b806307da68f51461010557806315b9a8b81461010f5780631785f53c146101295780632121dc751461014f575b600080fd5b61010d6102d1565b005b610117610387565b60408051918252519081900360200190f35b61010d6004803603602081101561013f57600080fd5b50356001600160a01b031661038d565b6101576103ec565b604080519115158252519081900360200190f35b6101576004803603602081101561018157600080fd5b50356001600160a01b03166103fc565b61011761046f565b610157610475565b61010d600480360360208110156101b757600080fd5b50356001600160a01b031661047e565b61010d61052c565b6101d761062a565b604080516001600160a01b039092168252519081900360200190f35b61010d6004803603606081101561020957600080fd5b506001600160a01b03813581169160208101359091169060400135610639565b61010d6004803603602081101561023f57600080fd5b50356001600160a01b031661073f565b61010d6004803603604081101561026557600080fd5b506001600160a01b038135169060200135151561080e565b6101576004803603602081101561029357600080fd5b50356001600160a01b03166109c8565b61010d610a3b565b61010d600480360360208110156102c157600080fd5b50356001600160a01b0316610acd565b6102da33610b4a565b806102f457503360009081526034602052604090205460ff165b610345576040805162461bcd60e51b815260206004820152601c60248201527f73656e646572206973206e6f742061646d696e206f72206f776e657200000000604482015290519081900360640190fd5b6038805460ff191660011790556040805133815290517f55c4adf1f68f084b809304657594a92ba835ada8d3b5340955bf05746723c05b9181900360200190a1565b60375490565b61039633610b4a565b6103e0576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b6103e981610b5e565b50565b603354600160a01b900460ff1690565b6000610406610475565b15610450576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b506001600160a01b031660009081526034602052604090205460ff1690565b60355490565b60385460ff1690565b61048733610b4a565b6104d1576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b6104d9610475565b15610523576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b6103e981610c34565b61053533610b4a565b61057f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603354600160a01b900460ff166105dd576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603380546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b3360009081526034602052604090205460ff16610693576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b61069b610475565b156106e5576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b6106f0838383610ddc565b604080516001600160a01b0380861682528416602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b61074833610b4a565b8061076257503360009081526034602052604090205460ff165b6107b3576040805162461bcd60e51b815260206004820152601c60248201527f73656e646572206973206e6f742061646d696e206f72206f776e657200000000604482015290519081900360640190fd5b6107bb610475565b15610805576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b6103e981610e1b565b61081733610b4a565b610861576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603354600160a01b900460ff166108bf576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166109045760405162461bcd60e51b81526004018080602001828103825260238152602001806114d66023913960400191505060405180910390fd5b6033805460ff60a01b1916600160a01b831515021790558061095d57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603354604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006109d2610475565b15610a1c576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b506001600160a01b031660009081526036602052604090205460ff1690565b610a4433610b4a565b610a8e576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b6038805460ff191690556040805133815290517f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94179181900360200190a1565b610ad633610b4a565b80610af057503360009081526034602052604090205460ff165b610b41576040805162461bcd60e51b815260206004820152601c60248201527f73656e646572206973206e6f742061646d696e206f72206f776e657200000000604482015290519081900360640190fd5b6103e981610fc3565b6033546001600160a01b0390811691161490565b6001600160a01b03811660009081526034602052604090205460ff16610bcb576040805162461bcd60e51b815260206004820181905260248201527f70726f7669646564206163636f756e74206973206e6f7420616e2061646d696e604482015290519081900360640190fd5b6001600160a01b038116600081815260346020908152604091829020805460ff191690556035805460001901905581513381529081019290925280517f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e9281900390910190a150565b6001600160a01b03811660009081526034602052604090205460ff1615610c8c5760405162461bcd60e51b81526004018080602001828103825260248152602001806114546024913960400191505060405180910390fd5b6001600160a01b03811660009081526036602052604090205460ff1615610ce45760405162461bcd60e51b81526004018080602001828103825260288152602001806115476028913960400191505060405180910390fd5b610ced81610b4a565b15610d295760405162461bcd60e51b815260040180806020018281038252602581526020018061142f6025913960400191505060405180910390fd5b6001600160a01b038116610d6e5760405162461bcd60e51b81526004018080602001828103825260248152602001806114f96024913960400191505060405180910390fd5b6001600160a01b038116600081815260346020908152604091829020805460ff1916600190811790915560358054909101905581513381529081019290925280517fc58b647b8ba5a8cab2f11f32673636cc1061324240972ed05e8cc005b81a4b7a9281900390910190a150565b6001600160a01b038216610e0257610dfd6001600160a01b03841682611083565b610e16565b610e166001600160a01b0383168483611168565b505050565b6001600160a01b03811660009081526034602052604090205460ff1615610e735760405162461bcd60e51b81526004018080602001828103825260248152602001806114546024913960400191505060405180910390fd5b6001600160a01b03811660009081526036602052604090205460ff1615610ecb5760405162461bcd60e51b81526004018080602001828103825260288152602001806115476028913960400191505060405180910390fd5b610ed481610b4a565b15610f105760405162461bcd60e51b815260040180806020018281038252602581526020018061142f6025913960400191505060405180910390fd5b6001600160a01b038116610f555760405162461bcd60e51b81526004018080602001828103825260248152602001806114f96024913960400191505060405180910390fd5b6001600160a01b038116600081815260366020908152604091829020805460ff1916600190811790915560378054909101905581513381529081019290925280517fb890d5abdcd5c2b61ce8bbc2cf6af9b6d7f7451830cbc85037cbdd182c86fe1d9281900390910190a150565b6001600160a01b03811660009081526036602052604090205460ff1661101a5760405162461bcd60e51b81526004018080602001828103825260248152602001806114b26024913960400191505060405180910390fd5b6001600160a01b038116600081815260366020908152604091829020805460ff191690556037805460001901905581513381529081019290925280517fb6a283aaede08e15ef55c74e3014e30eb0c0040d4b156cccb77391268ea373949281900390910190a150565b804710156110d8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114611123576040519150601f19603f3d011682016040523d82523d6000602084013e611128565b606091505b5050905080610e165760405162461bcd60e51b815260040180806020018281038252603a815260200180611478603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e16908490606061120a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166112669092919063ffffffff16565b805190915015610e165780806020019051602081101561122957600080fd5b5051610e165760405162461bcd60e51b815260040180806020018281038252602a81526020018061151d602a913960400191505060405180910390fd5b6060611275848460008561127d565b949350505050565b606061128885611428565b6112d9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106113185780518252601f1990920191602091820191016112f9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461137a576040519150601f19603f3d011682016040523d82523d6000602084013e61137f565b606091505b509150915081156113935791506112759050565b8051156113a35780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113ed5781810151838201526020016113d5565b50505050905090810190601f16801561141a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe70726f7669646564206163636f756e7420697320616c726561647920746865206f776e657270726f7669646564206163636f756e7420697320616c726561647920616e2061646d696e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656470726f7669646564206163636f756e74206973206e6f74206120636f6e74726f6c6c65726f776e65722063616e6e6f742062652073657420746f207a65726f206164647265737370726f7669646564206163636f756e7420697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656470726f7669646564206163636f756e7420697320616c7265616479206120636f6e74726f6c6c6572a26469706673582212202182257d4d9531de09db5d326b89b63c8f0663f9ec0ef7d12cf6ba885a119fd464736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var ControllerBin = "0x60806040523480156200001157600080fd5b506040516200178f3803806200178f833981810160405260208110156200003757600080fd5b5051620000468160006200004d565b50620001bc565b600054610100900460ff168062000069575062000069620001b6565b8062000078575060005460ff16155b620000b55760405162461bcd60e51b815260040180806020018281038252602e81526020018062001761602e913960400191505060405180910390fd5b600054610100900460ff16158015620000e1576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b0385161760ff60a01b1916600160a01b8415158102919091179182905560ff9104166200015a57604080516001600160a01b038516815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b60408051600081526001600160a01b038516602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a18015620001b1576000805461ff00191690555b505050565b303b1590565b61159580620001cc6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063b242e53411610066578063b242e5341461024f578063b429afeb1461027d578063be9a6555146102a3578063f6a74ed7146102ab57610100565b8063715018a6146101c75780638da5cb5b146101cf578063996cba68146101f3578063a7fc7a071461022957610100565b806324d7806c116100d357806324d7806c1461016b5780632b7832b3146101915780633f683b6a1461019957806370480275146101a157610100565b806307da68f51461010557806315b9a8b81461010f5780631785f53c146101295780632121dc751461014f575b600080fd5b61010d6102d1565b005b610117610387565b60408051918252519081900360200190f35b61010d6004803603602081101561013f57600080fd5b50356001600160a01b031661038d565b6101576103e9565b604080519115158252519081900360200190f35b6101576004803603602081101561018157600080fd5b50356001600160a01b03166103f9565b61011761046c565b610157610472565b61010d600480360360208110156101b757600080fd5b50356001600160a01b031661047b565b61010d610526565b6101d7610621565b604080516001600160a01b039092168252519081900360200190f35b61010d6004803603606081101561020957600080fd5b506001600160a01b03813581169160208101359091169060400135610630565b61010d6004803603602081101561023f57600080fd5b50356001600160a01b0316610736565b61010d6004803603604081101561026557600080fd5b506001600160a01b0381351690602001351515610805565b6101576004803603602081101561029357600080fd5b50356001600160a01b03166109bc565b61010d610a2f565b61010d600480360360208110156102c157600080fd5b50356001600160a01b0316610abe565b6102da33610b3b565b806102f457503360009081526034602052604090205460ff165b610345576040805162461bcd60e51b815260206004820152601c60248201527f73656e646572206973206e6f742061646d696e206f72206f776e657200000000604482015290519081900360640190fd5b6038805460ff191660011790556040805133815290517f55c4adf1f68f084b809304657594a92ba835ada8d3b5340955bf05746723c05b9181900360200190a1565b60375490565b61039633610b3b565b6103dd576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b6103e681610b4f565b50565b603354600160a01b900460ff1690565b6000610403610472565b1561044d576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b506001600160a01b031660009081526034602052604090205460ff1690565b60355490565b60385460ff1690565b61048433610b3b565b6104cb576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b6104d3610472565b1561051d576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b6103e681610c25565b61052f33610b3b565b610576576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b603354600160a01b900460ff166105d4576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603380546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6033546001600160a01b031690565b3360009081526034602052604090205460ff1661068a576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b610692610472565b156106dc576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b6106e7838383610dcd565b604080516001600160a01b0380861682528416602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b61073f33610b3b565b8061075957503360009081526034602052604090205460ff165b6107aa576040805162461bcd60e51b815260206004820152601c60248201527f73656e646572206973206e6f742061646d696e206f72206f776e657200000000604482015290519081900360640190fd5b6107b2610472565b156107fc576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b6103e681610e0c565b61080e33610b3b565b610855576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b603354600160a01b900460ff166108b3576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166108f85760405162461bcd60e51b81526004018080602001828103825260238152602001806114c76023913960400191505060405180910390fd5b6033805460ff60a01b1916600160a01b831515021790558061095157604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603354604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006109c6610472565b15610a10576040805162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9bdb1b195c881a5cc81cdd1bdc1c1959605a1b604482015290519081900360640190fd5b506001600160a01b031660009081526036602052604090205460ff1690565b610a3833610b3b565b610a7f576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b6038805460ff191690556040805133815290517f27029695aa5f602a4ee81f4c32dfa86e562f200a17966496f3a7c3f2ec0f94179181900360200190a1565b610ac733610b3b565b80610ae157503360009081526034602052604090205460ff165b610b32576040805162461bcd60e51b815260206004820152601c60248201527f73656e646572206973206e6f742061646d696e206f72206f776e657200000000604482015290519081900360640190fd5b6103e681610fb4565b6033546001600160a01b0390811691161490565b6001600160a01b03811660009081526034602052604090205460ff16610bbc576040805162461bcd60e51b815260206004820181905260248201527f70726f7669646564206163636f756e74206973206e6f7420616e2061646d696e604482015290519081900360640190fd5b6001600160a01b038116600081815260346020908152604091829020805460ff191690556035805460001901905581513381529081019290925280517f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e9281900390910190a150565b6001600160a01b03811660009081526034602052604090205460ff1615610c7d5760405162461bcd60e51b81526004018080602001828103825260248152602001806114456024913960400191505060405180910390fd5b6001600160a01b03811660009081526036602052604090205460ff1615610cd55760405162461bcd60e51b81526004018080602001828103825260288152602001806115386028913960400191505060405180910390fd5b610cde81610b3b565b15610d1a5760405162461bcd60e51b81526004018080602001828103825260258152602001806114206025913960400191505060405180910390fd5b6001600160a01b038116610d5f5760405162461bcd60e51b81526004018080602001828103825260248152602001806114ea6024913960400191505060405180910390fd5b6001600160a01b038116600081815260346020908152604091829020805460ff1916600190811790915560358054909101905581513381529081019290925280517fc58b647b8ba5a8cab2f11f32673636cc1061324240972ed05e8cc005b81a4b7a9281900390910190a150565b6001600160a01b038216610df357610dee6001600160a01b03841682611074565b610e07565b610e076001600160a01b0383168483611159565b505050565b6001600160a01b03811660009081526034602052604090205460ff1615610e645760405162461bcd60e51b81526004018080602001828103825260248152602001806114456024913960400191505060405180910390fd5b6001600160a01b03811660009081526036602052604090205460ff1615610ebc5760405162461bcd60e51b81526004018080602001828103825260288152602001806115386028913960400191505060405180910390fd5b610ec581610b3b565b15610f015760405162461bcd60e51b81526004018080602001828103825260258152602001806114206025913960400191505060405180910390fd5b6001600160a01b038116610f465760405162461bcd60e51b81526004018080602001828103825260248152602001806114ea6024913960400191505060405180910390fd5b6001600160a01b038116600081815260366020908152604091829020805460ff1916600190811790915560378054909101905581513381529081019290925280517fb890d5abdcd5c2b61ce8bbc2cf6af9b6d7f7451830cbc85037cbdd182c86fe1d9281900390910190a150565b6001600160a01b03811660009081526036602052604090205460ff1661100b5760405162461bcd60e51b81526004018080602001828103825260248152602001806114a36024913960400191505060405180910390fd5b6001600160a01b038116600081815260366020908152604091829020805460ff191690556037805460001901905581513381529081019290925280517fb6a283aaede08e15ef55c74e3014e30eb0c0040d4b156cccb77391268ea373949281900390910190a150565b804710156110c9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114611114576040519150601f19603f3d011682016040523d82523d6000602084013e611119565b606091505b5050905080610e075760405162461bcd60e51b815260040180806020018281038252603a815260200180611469603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e0790849060606111fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166112579092919063ffffffff16565b805190915015610e075780806020019051602081101561121a57600080fd5b5051610e075760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6060611266848460008561126e565b949350505050565b606061127985611419565b6112ca576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106113095780518252601f1990920191602091820191016112ea565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b509150915081156113845791506112669050565b8051156113945780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113de5781810151838201526020016113c6565b50505050905090810190601f16801561140b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b15159056fe70726f7669646564206163636f756e7420697320616c726561647920746865206f776e657270726f7669646564206163636f756e7420697320616c726561647920616e2061646d696e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656470726f7669646564206163636f756e74206973206e6f74206120636f6e74726f6c6c65726f776e65722063616e6e6f742062652073657420746f207a65726f206164647265737370726f7669646564206163636f756e7420697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656470726f7669646564206163636f756e7420697320616c7265616479206120636f6e74726f6c6c6572a26469706673582212200ee2fcb97d85286a2d9e872abae501db5a54a5133afa89ac005a79f12ba6e66464736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployController deploys a new Ethereum contract, binding an instance of Controller to it. func DeployController(auth *bind.TransactOpts, backend bind.ContractBackend, _ownerAddress_ common.Address) (common.Address, *types.Transaction, *Controller, error) { diff --git a/pkg/bindings/gasProxy.go b/pkg/bindings/gasProxy.go index 7b49bbd7..6a5fb23b 100644 --- a/pkg/bindings/gasProxy.go +++ b/pkg/bindings/gasProxy.go @@ -37,7 +37,7 @@ type GasRefundableGasTokenParameters struct { const GasProxyABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutedTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_gasTokenAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"freeCallGasCost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasRefundPerUnit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structGasRefundable.GasTokenParameters\",\"name\":\"_gasTokenParameters\",\"type\":\"tuple\"}],\"name\":\"SetGasToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTokenParameters\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"freeCallGasCost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasRefundPerUnit\",\"type\":\"uint256\"}],\"internalType\":\"structGasRefundable.GasTokenParameters\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gasTokenAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"freeCallGasCost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasRefundPerUnit\",\"type\":\"uint256\"}],\"internalType\":\"structGasRefundable.GasTokenParameters\",\"name\":\"_parameters\",\"type\":\"tuple\"}],\"name\":\"setGasToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // GasProxyBin is the compiled bytecode used for deploying new contracts. -var GasProxyBin = "0x603380546001600160a01b03199081166e0c2e074ec69a0dfb2997ba6c7d2e1e179091557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d5893697603455603580549091166d4946c0e9f43f4dee607b0ef1fa1c17905560c060405261374a608081905261a0aa60a08190526036919091556037553480156200008b57600080fd5b5060405162000d4638038062000d46833981016040819052620000ae916200022c565b620000b982620000cc565b620000c4816200018e565b5050620002b4565b600054610100900460ff1680620000e85750620000e862000226565b80620000f7575060005460ff16155b6200011f5760405162461bcd60e51b8152600401620001169062000266565b60405180910390fd5b600054610100900460ff161580156200014b576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200017757603380546001600160a01b0319166001600160a01b0384161790555b80156200018a576000805461ff00191690555b5050565b600054610100900460ff1680620001aa5750620001aa62000226565b80620001b9575060005460ff16155b620001d85760405162461bcd60e51b8152600401620001169062000266565b600054610100900460ff1615801562000204576000805460ff1961ff0019909116610100171660011790555b81156200017757603482905580156200018a576000805461ff00191690555050565b303b1590565b600080604083850312156200023f578182fd5b82516001600160a01b038116811462000256578283fd5b6020939093015192949293505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b610a8280620002c46000396000f3fe6080604052600436106100555760003560e01c80633686ba421461005a5780633f579f4214610085578063719d5c6f146100a55780637d73b231146100c7578063c91d59fe146100e9578063e2b4ce97146100fe575b600080fd5b34801561006657600080fd5b5061006f610120565b60405161007c9190610a26565b60405180910390f35b610098610093366004610698565b610143565b60405161007c91906108a2565b3480156100b157600080fd5b506100c56100c0366004610659565b610300565b005b3480156100d357600080fd5b506100dc610341565b60405161007c9190610808565b3480156100f557600080fd5b506100dc610350565b34801561010a57600080fd5b5061011361035f565b60405161007c9190610899565b61012861061c565b50604080518082019091526036548152603754602082015290565b606061014e33610365565b6101735760405162461bcd60e51b815260040161016a906109c1565b60405180910390fd5b60005a905060006060876001600160a01b03168787876040516101979291906107f8565b60006040518083038185875af1925050503d80600081146101d4576040519150601f19603f3d011682016040523d82523d6000602084013e6101d9565b606091505b5091509150816101fb5760405162461bcd60e51b815260040161016a906109f8565b7ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138888888885604051610232959493929190610839565b60405180910390a19250506000601036025a836152080103019050603560009054906101000a90046001600160a01b03166001600160a01b0316636366b93660366001015460366000015484018161028657fe5b046040518263ffffffff1660e01b81526004016102a39190610899565b602060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610786565b505050949350505050565b610309336103f3565b6103255760405162461bcd60e51b815260040161016a906108ec565b61033d826103383684900384018461073c565b61042b565b5050565b6033546001600160a01b031690565b6035546001600160a01b031690565b60345490565b60006103726034546104f6565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040161039d9190610808565b60206040518083038186803b1580156103b557600080fd5b505afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed919061071c565b92915050565b60006104006034546104f6565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040161039d9190610808565b6001600160a01b0382166104515760405162461bcd60e51b815260040161016a90610953565b805161046f5760405162461bcd60e51b815260040161016a9061098a565b60208101516104905760405162461bcd60e51b815260040161016a9061091c565b603580546001600160a01b0319166001600160a01b038416179055805160365560208101516037556040517fd82ec20581833e6b763037b2f1082d6b9c2ba3e8dbaaf4aab4c2b4c49d99fbb5906104ea908490849061081c565b60405180910390a15050565b6033546000906001600160a01b03166105215760405162461bcd60e51b815260040161016a906108b5565b603354604051630178b8bf60e01b81526001600160a01b0390911690630178b8bf90610551908590600401610899565b60206040518083038186803b15801561056957600080fd5b505afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610636565b6001600160a01b0316633b3b57de836040518263ffffffff1660e01b81526004016105cc9190610899565b60206040518083038186803b1580156105e457600080fd5b505afa1580156105f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed9190610636565b604051806040016040528060008152602001600081525090565b600060208284031215610647578081fd5b815161065281610a34565b9392505050565b600080828403606081121561066c578182fd5b833561067781610a34565b92506040601f198201121561068a578182fd5b506020830190509250929050565b600080600080606085870312156106ad578182fd5b84356106b881610a34565b935060208501359250604085013567ffffffffffffffff808211156106db578384fd5b818701915087601f8301126106ee578384fd5b8135818111156106fc578485fd5b88602082850101111561070d578485fd5b95989497505060200194505050565b60006020828403121561072d578081fd5b81518015158114610652578182fd5b60006040828403121561074d578081fd5b6040516040810181811067ffffffffffffffff8211171561076c578283fd5b604052823581526020928301359281019290925250919050565b600060208284031215610797578081fd5b5051919050565b60008151808452815b818110156107c3576020818501810151868301820152016107a7565b818111156107d45782602083870101525b50601f01601f19169290920160200192915050565b80518252602090810151910152565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03831681526060810161065260208301846107e9565b6001600160a01b03861681526020810185905260806040820181905281018390526000838560a08401378060a08584010152601f19601f850116820160a083820301606084015261088d60a082018561079e565b98975050505050505050565b90815260200190565b600060208252610652602083018461079e565b6020808252601d908201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604082015260600190565b60208082526016908201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604082015260600190565b60208082526018908201527f67617320726566756e642070657220756e697420697320300000000000000000604082015260600190565b60208082526018908201527f67617320746f6b656e2061646472657373206973203078300000000000000000604082015260600190565b60208082526017908201527f667265652063616c6c2067617320636f73742069732030000000000000000000604082015260600190565b6020808252601a908201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604082015260600190565b602080825260149082015273195e1d195c9b985b0818d85b1b0819985a5b195960621b604082015260600190565b604081016103ed82846107e9565b6001600160a01b0381168114610a4957600080fd5b5056fea26469706673582212201cd6755109c572e0d618a99386ec1740d43212ab3695a3f30fb62a5ec14b77d964736f6c634300060c0033" +var GasProxyBin = "0x603380546001600160a01b03199081166e0c2e074ec69a0dfb2997ba6c7d2e1e179091557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d5893697603455603580549091166d4946c0e9f43f4dee607b0ef1fa1c17905560c060405261374a608081905261a0aa60a08190526036919091556037553480156200008b57600080fd5b5060405162000d4338038062000d43833981016040819052620000ae916200022c565b620000b982620000cc565b620000c4816200018e565b5050620002b4565b600054610100900460ff1680620000e85750620000e862000226565b80620000f7575060005460ff16155b6200011f5760405162461bcd60e51b8152600401620001169062000266565b60405180910390fd5b600054610100900460ff161580156200014b576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200017757603380546001600160a01b0319166001600160a01b0384161790555b80156200018a576000805461ff00191690555b5050565b600054610100900460ff1680620001aa5750620001aa62000226565b80620001b9575060005460ff16155b620001d85760405162461bcd60e51b8152600401620001169062000266565b600054610100900460ff1615801562000204576000805460ff1961ff0019909116610100171660011790555b81156200017757603482905580156200018a576000805461ff00191690555050565b303b1590565b600080604083850312156200023f578182fd5b82516001600160a01b038116811462000256578283fd5b6020939093015192949293505050565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b610a7f80620002c46000396000f3fe6080604052600436106100555760003560e01c80633686ba421461005a5780633f579f4214610085578063719d5c6f146100a55780637d73b231146100c7578063c91d59fe146100e9578063e2b4ce97146100fe575b600080fd5b34801561006657600080fd5b5061006f610120565b60405161007c9190610a23565b60405180910390f35b610098610093366004610698565b610143565b60405161007c91906108a2565b3480156100b157600080fd5b506100c56100c0366004610659565b610300565b005b3480156100d357600080fd5b506100dc610341565b60405161007c9190610808565b3480156100f557600080fd5b506100dc610350565b34801561010a57600080fd5b5061011361035f565b60405161007c9190610899565b61012861061c565b50604080518082019091526036548152603754602082015290565b606061014e33610365565b6101735760405162461bcd60e51b815260040161016a906109ec565b60405180910390fd5b60005a905060006060876001600160a01b03168787876040516101979291906107f8565b60006040518083038185875af1925050503d80600081146101d4576040519150601f19603f3d011682016040523d82523d6000602084013e6101d9565b606091505b5091509150816101fb5760405162461bcd60e51b815260040161016a906109be565b7ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138888888885604051610232959493929190610839565b60405180910390a19250506000601036025a836152080103019050603560009054906101000a90046001600160a01b03166001600160a01b0316636366b93660366001015460366000015484018161028657fe5b046040518263ffffffff1660e01b81526004016102a39190610899565b602060405180830381600087803b1580156102bd57600080fd5b505af11580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610786565b505050949350505050565b610309336103f3565b6103255760405162461bcd60e51b815260040161016a90610923565b61033d826103383684900384018461073c565b61042b565b5050565b6033546001600160a01b031690565b6035546001600160a01b031690565b60345490565b60006103726034546104f6565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040161039d9190610808565b60206040518083038186803b1580156103b557600080fd5b505afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed919061071c565b92915050565b60006104006034546104f6565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040161039d9190610808565b6001600160a01b0382166104515760405162461bcd60e51b815260040161016a90610950565b805161046f5760405162461bcd60e51b815260040161016a90610987565b60208101516104905760405162461bcd60e51b815260040161016a906108ec565b603580546001600160a01b0319166001600160a01b038416179055805160365560208101516037556040517fd82ec20581833e6b763037b2f1082d6b9c2ba3e8dbaaf4aab4c2b4c49d99fbb5906104ea908490849061081c565b60405180910390a15050565b6033546000906001600160a01b03166105215760405162461bcd60e51b815260040161016a906108b5565b603354604051630178b8bf60e01b81526001600160a01b0390911690630178b8bf90610551908590600401610899565b60206040518083038186803b15801561056957600080fd5b505afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190610636565b6001600160a01b0316633b3b57de836040518263ffffffff1660e01b81526004016105cc9190610899565b60206040518083038186803b1580156105e457600080fd5b505afa1580156105f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed9190610636565b604051806040016040528060008152602001600081525090565b600060208284031215610647578081fd5b815161065281610a31565b9392505050565b600080828403606081121561066c578182fd5b833561067781610a31565b92506040601f198201121561068a578182fd5b506020830190509250929050565b600080600080606085870312156106ad578182fd5b84356106b881610a31565b935060208501359250604085013567ffffffffffffffff808211156106db578384fd5b818701915087601f8301126106ee578384fd5b8135818111156106fc578485fd5b88602082850101111561070d578485fd5b95989497505060200194505050565b60006020828403121561072d578081fd5b81518015158114610652578182fd5b60006040828403121561074d578081fd5b6040516040810181811067ffffffffffffffff8211171561076c578283fd5b604052823581526020928301359281019290925250919050565b600060208284031215610797578081fd5b5051919050565b60008151808452815b818110156107c3576020818501810151868301820152016107a7565b818111156107d45782602083870101525b50601f01601f19169290920160200192915050565b80518252602090810151910152565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03831681526060810161065260208301846107e9565b6001600160a01b03861681526020810185905260806040820181905281018390526000838560a08401378060a08584010152601f19601f850116820160a083820301606084015261088d60a082018561079e565b98975050505050505050565b90815260200190565b600060208252610652602083018461079e565b6020808252601d908201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604082015260600190565b60208082526018908201527f67617320726566756e642070657220756e697420697320300000000000000000604082015260600190565b60208082526013908201527239b2b73232b91034b9903737ba1030b236b4b760691b604082015260600190565b60208082526018908201527f67617320746f6b656e2061646472657373206973203078300000000000000000604082015260600190565b60208082526017908201527f667265652063616c6c2067617320636f73742069732030000000000000000000604082015260600190565b602080825260149082015273195e1d195c9b985b0818d85b1b0819985a5b195960621b604082015260600190565b60208082526018908201527f73656e646572206973206e6f7420636f6e74726f6c6c65720000000000000000604082015260600190565b604081016103ed82846107e9565b6001600160a01b0381168114610a4657600080fd5b5056fea2646970667358221220a48efd8a9282fa53828edc9259181558187fc4037c78f02a3a0402da94b6beeb64736f6c634300060c0033" // DeployGasProxy deploys a new Ethereum contract, binding an instance of GasProxy to it. func DeployGasProxy(auth *bind.TransactOpts, backend bind.ContractBackend, _ens_ common.Address, _controllerNode_ [32]byte) (common.Address, *types.Transaction, *GasProxy, error) { diff --git a/pkg/bindings/holder.go b/pkg/bindings/holder.go index f31d24db..4d999cf1 100644 --- a/pkg/bindings/holder.go +++ b/pkg/bindings/holder.go @@ -31,7 +31,7 @@ var ( const HolderABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_burnerContract_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"CashAndBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Received\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_nonRedeemableAddresses\",\"type\":\"address[]\"}],\"name\":\"nonRedeemableTokenClaim\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]" // HolderBin is the compiled bytecode used for deploying new contracts. -var HolderBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966035553480156200007a57600080fd5b506040516200145c3803806200145c83398181016040526080811015620000a057600080fd5b5080516020820151604083015160609093015191929091620000c28362000102565b620000cd81620001d9565b620000d8826200028f565b5050603680546001600160a01b0319166001600160a01b039390931692909217909155506200034b565b600054610100900460ff16806200011e57506200011e62000345565b806200012d575060005460ff16155b6200016a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806200142e602e913960400191505060405180910390fd5b600054610100900460ff1615801562000196576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615620001c257603380546001600160a01b0319166001600160a01b0384161790555b8015620001d5576000805461ff00191690555b5050565b600054610100900460ff1680620001f55750620001f562000345565b8062000204575060005460ff16155b620002415760405162461bcd60e51b815260040180806020018281038252602e8152602001806200142e602e913960400191505060405180910390fd5b600054610100900460ff161580156200026d576000805460ff1961ff0019909116610100171660011790555b8115620001c25760348290558015620001d5576000805461ff00191690555050565b600054610100900460ff1680620002ab5750620002ab62000345565b80620002ba575060005460ff16155b620002f75760405162461bcd60e51b815260040180806020018281038252602e8152602001806200142e602e913960400191505060405180910390fd5b600054610100900460ff1615801562000323576000805460ff1961ff0019909116610100171660011790555b8115620001c25760358290558015620001d5576000805461ff00191690555050565b303b1590565b6110d3806200035b6000396000f3fe6080604052600436106100595760003560e01c806327810b6e1461009f57806340f6a70f146100d05780637d73b23114610171578063877337b0146101865780639dc29fac146101ad578063e2b4ce97146101e65761009a565b3661009a576040805133815234602082015281517f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874929181900390910190a1005b600080fd5b3480156100ab57600080fd5b506100b46101fb565b604080516001600160a01b039092168252519081900360200190f35b3480156100dc57600080fd5b5061015d600480360360408110156100f357600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011e57600080fd5b82018360208201111561013057600080fd5b8035906020019184602083028401116401000000008311171561015257600080fd5b50909250905061020a565b604080519115158252519081900360200190f35b34801561017d57600080fd5b506100b46103bd565b34801561019257600080fd5b5061019b6103cc565b60408051918252519081900360200190f35b3480156101b957600080fd5b5061015d600480360360408110156101d057600080fd5b506001600160a01b0381351690602001356103d2565b3480156101f257600080fd5b5061019b6105ac565b6036546001600160a01b031690565b6000610215336105b2565b61025f576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b60005b828110156103b25761028e84848381811061027957fe5b905060200201356001600160a01b031661063f565b156102e0576040805162461bcd60e51b815260206004820152601d60248201527f72656465656d61626c65732063616e6e6f7420626520636c61696d6564000000604482015290519081900360640190fd5b60006103068585848181106102f157fe5b905060200201356001600160a01b0316610658565b905080156103a9576103348686868581811061031e57fe5b905060200201356001600160a01b0316836106e9565b7ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926838686868581811061036257fe5b905060200201356001600160a01b03168360405180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060405180910390a15b50600101610262565b506001949350505050565b6033546001600160a01b031690565b60355490565b6036546000906001600160a01b0316331461041e5760405162461bcd60e51b815260040180806020018281038252602181526020018061107d6021913960400191505060405180910390fd5b8161042b575060016105a6565b60006104b183603660009054906101000a90046001600160a01b03166001600160a01b031663771282f66040518163ffffffff1660e01b815260040160206040518083038186803b15801561047f57600080fd5b505afa158015610493573d6000803e3d6000fd5b505050506040513d60208110156104a957600080fd5b505190610728565b905060606104bd610789565b905060005b815181101561059e5760006104e98383815181106104dc57fe5b6020026020010151610658565b9050801561059557600061050785610501848a61089c565b906108f5565b90506105278885858151811061051957fe5b6020026020010151836106e9565b7f43e074e3351faae8657cc314cf10440a8e7a87ce5092ee4bf9baf56f73fe6c568885858151811061055557fe5b60200260200101518360405180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060405180910390a1505b506001016104c2565b506001925050505b92915050565b60345490565b60006105bf603454610937565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561060b57600080fd5b505afa15801561061f573d6000803e3d6000fd5b505050506040513d602081101561063557600080fd5b505190505b919050565b60008061064b83610a58565b5098975050505050505050565b60006001600160a01b038216156106e257604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156106af57600080fd5b505afa1580156106c3573d6000803e3d6000fd5b505050506040513d60208110156106d957600080fd5b5051905061063a565b504761063a565b6001600160a01b03821661070f5761070a6001600160a01b03841682610be3565b610723565b6107236001600160a01b0383168483610cc8565b505050565b600082820183811015610782576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6060610796603554610937565b6001600160a01b03166344b049bc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156107ce57600080fd5b505afa1580156107e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561080b57600080fd5b810190808051604051939291908464010000000082111561082b57600080fd5b90830190602082018581111561084057600080fd5b825186602082028301116401000000008211171561085d57600080fd5b82525081516020918201928201910280838360005b8381101561088a578181015183820152602001610872565b50505050905001604052505050905090565b6000826108ab575060006105a6565b828202828482816108b857fe5b04146107825760405162461bcd60e51b81526004018080602001828103825260218152602001806110326021913960400191505060405180910390fd5b600061078283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d1a565b6033546000906001600160a01b0316610997576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050506040513d6020811015610a0d57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561060b57600080fd5b6060600080600080600080610a6e603554610937565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b158015610aba57600080fd5b505afa158015610ace573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e0811015610af757600080fd5b8101908080516040519392919084640100000000821115610b1757600080fd5b908301906020820185811115610b2c57600080fd5b8251640100000000811182820188101715610b4657600080fd5b82525081516020918201929091019080838360005b83811015610b73578181015183820152602001610b5b565b50505050905090810190601f168015610ba05780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b80471015610c38576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610c83576040519150601f19603f3d011682016040523d82523d6000602084013e610c88565b606091505b50509050806107235760405162461bcd60e51b815260040180806020018281038252603a815260200180610ff8603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610723908490610dbc565b60008183610da65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d6b578181015183820152602001610d53565b50505050905090810190601f168015610d985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610db257fe5b0495945050505050565b6060610e11826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e6d9092919063ffffffff16565b80519091501561072357808060200190516020811015610e3057600080fd5b50516107235760405162461bcd60e51b815260040180806020018281038252602a815260200180611053602a913960400191505060405180910390fd5b6060610e7c8484600085610e84565b949350505050565b6060610e8f85610ff1565b610ee0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310610f1f5780518252601f199092019160209182019101610f00565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610f81576040519150601f19603f3d011682016040523d82523d6000602084013e610f86565b606091505b50915091508115610f9a579150610e7c9050565b805115610faa5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315610d6b578181015183820152602001610d53565b3b15159056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646275726e657220636f6e7472616374206973206e6f74207468652073656e646572a26469706673582212202ae039c8a58b2fd61d2031ca056f15bad3873ccdd362ec172233ab3d10b0406e64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var HolderBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966035553480156200007a57600080fd5b50604051620014593803806200145983398181016040526080811015620000a057600080fd5b5080516020820151604083015160609093015191929091620000c28362000102565b620000cd81620001d9565b620000d8826200028f565b5050603680546001600160a01b0319166001600160a01b039390931692909217909155506200034b565b600054610100900460ff16806200011e57506200011e62000345565b806200012d575060005460ff16155b6200016a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806200142b602e913960400191505060405180910390fd5b600054610100900460ff1615801562000196576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615620001c257603380546001600160a01b0319166001600160a01b0384161790555b8015620001d5576000805461ff00191690555b5050565b600054610100900460ff1680620001f55750620001f562000345565b8062000204575060005460ff16155b620002415760405162461bcd60e51b815260040180806020018281038252602e8152602001806200142b602e913960400191505060405180910390fd5b600054610100900460ff161580156200026d576000805460ff1961ff0019909116610100171660011790555b8115620001c25760348290558015620001d5576000805461ff00191690555050565b600054610100900460ff1680620002ab5750620002ab62000345565b80620002ba575060005460ff16155b620002f75760405162461bcd60e51b815260040180806020018281038252602e8152602001806200142b602e913960400191505060405180910390fd5b600054610100900460ff1615801562000323576000805460ff1961ff0019909116610100171660011790555b8115620001c25760358290558015620001d5576000805461ff00191690555050565b303b1590565b6110d0806200035b6000396000f3fe6080604052600436106100595760003560e01c806327810b6e1461009f57806340f6a70f146100d05780637d73b23114610171578063877337b0146101865780639dc29fac146101ad578063e2b4ce97146101e65761009a565b3661009a576040805133815234602082015281517f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874929181900390910190a1005b600080fd5b3480156100ab57600080fd5b506100b46101fb565b604080516001600160a01b039092168252519081900360200190f35b3480156100dc57600080fd5b5061015d600480360360408110156100f357600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561011e57600080fd5b82018360208201111561013057600080fd5b8035906020019184602083028401116401000000008311171561015257600080fd5b50909250905061020a565b604080519115158252519081900360200190f35b34801561017d57600080fd5b506100b46103ba565b34801561019257600080fd5b5061019b6103c9565b60408051918252519081900360200190f35b3480156101b957600080fd5b5061015d600480360360408110156101d057600080fd5b506001600160a01b0381351690602001356103cf565b3480156101f257600080fd5b5061019b6105a9565b6036546001600160a01b031690565b6000610215336105af565b61025c576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b60005b828110156103af5761028b84848381811061027657fe5b905060200201356001600160a01b031661063c565b156102dd576040805162461bcd60e51b815260206004820152601d60248201527f72656465656d61626c65732063616e6e6f7420626520636c61696d6564000000604482015290519081900360640190fd5b60006103038585848181106102ee57fe5b905060200201356001600160a01b0316610655565b905080156103a6576103318686868581811061031b57fe5b905060200201356001600160a01b0316836106e6565b7ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926838686868581811061035f57fe5b905060200201356001600160a01b03168360405180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060405180910390a15b5060010161025f565b506001949350505050565b6033546001600160a01b031690565b60355490565b6036546000906001600160a01b0316331461041b5760405162461bcd60e51b815260040180806020018281038252602181526020018061107a6021913960400191505060405180910390fd5b81610428575060016105a3565b60006104ae83603660009054906101000a90046001600160a01b03166001600160a01b031663771282f66040518163ffffffff1660e01b815260040160206040518083038186803b15801561047c57600080fd5b505afa158015610490573d6000803e3d6000fd5b505050506040513d60208110156104a657600080fd5b505190610725565b905060606104ba610786565b905060005b815181101561059b5760006104e68383815181106104d957fe5b6020026020010151610655565b90508015610592576000610504856104fe848a610899565b906108f2565b90506105248885858151811061051657fe5b6020026020010151836106e6565b7f43e074e3351faae8657cc314cf10440a8e7a87ce5092ee4bf9baf56f73fe6c568885858151811061055257fe5b60200260200101518360405180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060405180910390a1505b506001016104bf565b506001925050505b92915050565b60345490565b60006105bc603454610934565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b505190505b919050565b60008061064883610a55565b5098975050505050505050565b60006001600160a01b038216156106df57604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156106ac57600080fd5b505afa1580156106c0573d6000803e3d6000fd5b505050506040513d60208110156106d657600080fd5b50519050610637565b5047610637565b6001600160a01b03821661070c576107076001600160a01b03841682610be0565b610720565b6107206001600160a01b0383168483610cc5565b505050565b60008282018381101561077f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6060610793603554610934565b6001600160a01b03166344b049bc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156107cb57600080fd5b505afa1580156107df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561080857600080fd5b810190808051604051939291908464010000000082111561082857600080fd5b90830190602082018581111561083d57600080fd5b825186602082028301116401000000008211171561085a57600080fd5b82525081516020918201928201910280838360005b8381101561088757818101518382015260200161086f565b50505050905001604052505050905090565b6000826108a8575060006105a3565b828202828482816108b557fe5b041461077f5760405162461bcd60e51b815260040180806020018281038252602181526020018061102f6021913960400191505060405180910390fd5b600061077f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d17565b6033546000906001600160a01b0316610994576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156109e057600080fd5b505afa1580156109f4573d6000803e3d6000fd5b505050506040513d6020811015610a0a57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561060857600080fd5b6060600080600080600080610a6b603554610934565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e0811015610af457600080fd5b8101908080516040519392919084640100000000821115610b1457600080fd5b908301906020820185811115610b2957600080fd5b8251640100000000811182820188101715610b4357600080fd5b82525081516020918201929091019080838360005b83811015610b70578181015183820152602001610b58565b50505050905090810190601f168015610b9d5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b80471015610c35576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610c80576040519150601f19603f3d011682016040523d82523d6000602084013e610c85565b606091505b50509050806107205760405162461bcd60e51b815260040180806020018281038252603a815260200180610ff5603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610720908490610db9565b60008183610da35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d68578181015183820152602001610d50565b50505050905090810190601f168015610d955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610daf57fe5b0495945050505050565b6060610e0e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e6a9092919063ffffffff16565b80519091501561072057808060200190516020811015610e2d57600080fd5b50516107205760405162461bcd60e51b815260040180806020018281038252602a815260200180611050602a913960400191505060405180910390fd5b6060610e798484600085610e81565b949350505050565b6060610e8c85610fee565b610edd576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310610f1c5780518252601f199092019160209182019101610efd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b50915091508115610f97579150610e799050565b805115610fa75780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315610d68578181015183820152602001610d50565b3b15159056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646275726e657220636f6e7472616374206973206e6f74207468652073656e646572a2646970667358221220e710838748d2f0e692e33d47737aeda8eca4d0e5996cbf7e48bff81578298d4e64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployHolder deploys a new Ethereum contract, binding an instance of Holder to it. func DeployHolder(auth *bind.TransactOpts, backend bind.ContractBackend, _burnerContract_ common.Address, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte) (common.Address, *types.Transaction, *Holder, error) { diff --git a/pkg/bindings/licence.go b/pkg/bindings/licence.go index bc9ce1ec..bf0b5c83 100644 --- a/pkg/bindings/licence.go +++ b/pkg/bindings/licence.go @@ -31,7 +31,7 @@ var ( const LicenceABI = "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_licence_\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"_float_\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_holder_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tknAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TransferredToCryptoFloat\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TransferredToTokenHolder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newFloat\",\"type\":\"address\"}],\"name\":\"UpdatedCryptoFloat\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newAmount\",\"type\":\"uint256\"}],\"name\":\"UpdatedLicenceAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newDAO\",\"type\":\"address\"}],\"name\":\"UpdatedLicenceDAO\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newTKN\",\"type\":\"address\"}],\"name\":\"UpdatedTKNContractAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHolder\",\"type\":\"address\"}],\"name\":\"UpdatedTokenHolder\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_AMOUNT_SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_AMOUNT_SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cryptoFloat\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"floatLocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"holderLocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceAmountScaled\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceDAO\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceDAOLocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"load\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockFloat\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockHolder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockLicenceDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockTKNContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tknContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tknContractAddressLocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenHolder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_newFloat\",\"type\":\"address\"}],\"name\":\"updateFloat\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_newHolder\",\"type\":\"address\"}],\"name\":\"updateHolder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newAmount\",\"type\":\"uint256\"}],\"name\":\"updateLicenceAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newDAO\",\"type\":\"address\"}],\"name\":\"updateLicenceDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newTKN\",\"type\":\"address\"}],\"name\":\"updateTKNContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]" // LicenceBin is the compiled bytecode used for deploying new contracts. -var LicenceBin = "0x6080604052603380546001600160a01b03199081166e0c2e074ec69a0dfb2997ba6c7d2e1e179091557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034556035805490911673aaaf91d9b90df800df4f55c205fd6989c977e73a1790553480156200007857600080fd5b50604051620019e8380380620019e8833981810160405260c08110156200009e57600080fd5b508051602082015160408301516060840151608085015160a090950151939492939192909160018610801590620000d757506103e88611155b62000129576040805162461bcd60e51b815260206004820152601b60248201527f6c6963656e636520616d6f756e74206f7574206f662072616e67650000000000604482015290519081900360640190fd5b6200013482620001a2565b6200013f8162000279565b6039869055603680546001600160a01b038088166001600160a01b0319928316179092556037805487841692169190911790558316156200019657603580546001600160a01b0319166001600160a01b0385161790555b50505050505062000335565b600054610100900460ff1680620001be5750620001be6200032f565b80620001cd575060005460ff16155b6200020a5760405162461bcd60e51b815260040180806020018281038252602e815260200180620019ba602e913960400191505060405180910390fd5b600054610100900460ff1615801562000236576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200026257603380546001600160a01b0319166001600160a01b0384161790555b801562000275576000805461ff00191690555b5050565b600054610100900460ff1680620002955750620002956200032f565b80620002a4575060005460ff16155b620002e15760405162461bcd60e51b815260040180806020018281038252602e815260200180620019ba602e913960400191505060405180910390fd5b600054610100900460ff161580156200030d576000805460ff1961ff0019909116610100171660011790555b811562000262576034829055801562000275576000805461ff00191690555050565b303b1590565b61167580620003456000396000f3fe60806040526004361061014f5760003560e01c8063996cba68116100b6578063d0cddd671161006f578063d0cddd67146103af578063d1696b16146103e2578063e2b4ce97146103f7578063e30c5fa81461040c578063e3d8024214610421578063f15ff4551461045457610156565b8063996cba681461030357806399a5e1d014610346578063a036ba601461035b578063ac904c6314610370578063ca0e2e2014610385578063d08b4ecc1461039a57610156565b806342719faa1161010857806342719faa1461023e5780634ac22b3c1461027157806368ce74e7146102865780637d73b231146102b0578063837c70ef146102c5578063940b9c3b146102ee57610156565b80630bf25c911461015b5780630d42e82f146101725780631b3c96b4146101a55780633a7afe02146101d15780633acec15f14610202578063420a83e71461022957610156565b3661015657005b600080fd5b34801561016757600080fd5b50610170610469565b005b34801561017e57600080fd5b506101706004803603602081101561019557600080fd5b50356001600160a01b03166104c6565b610170600480360360408110156101bb57600080fd5b506001600160a01b0381351690602001356105ac565b3480156101dd57600080fd5b506101e66107de565b604080516001600160a01b039092168252519081900360200190f35b34801561020e57600080fd5b506102176107ed565b60408051918252519081900360200190f35b34801561023557600080fd5b506101e66107f2565b34801561024a57600080fd5b506101706004803603602081101561026157600080fd5b50356001600160a01b0316610801565b34801561027d57600080fd5b506101706108f7565b34801561029257600080fd5b50610170600480360360208110156102a957600080fd5b5035610954565b3480156102bc57600080fd5b506101e6610a52565b3480156102d157600080fd5b506102da610a61565b604080519115158252519081900360200190f35b3480156102fa57600080fd5b506102da610a71565b34801561030f57600080fd5b506101706004803603606081101561032657600080fd5b506001600160a01b03813581169160208101359091169060400135610a81565b34801561035257600080fd5b506101e6610b23565b34801561036757600080fd5b506101e6610b32565b34801561037c57600080fd5b50610217610b41565b34801561039157600080fd5b50610217610b47565b3480156103a657600080fd5b50610170610b4d565b3480156103bb57600080fd5b50610170600480360360208110156103d257600080fd5b50356001600160a01b0316610baa565b3480156103ee57600080fd5b50610170610c92565b34801561040357600080fd5b50610217610cef565b34801561041857600080fd5b506102da610cf5565b34801561042d57600080fd5b506101706004803603602081101561044457600080fd5b50356001600160a01b0316610d05565b34801561046057600080fd5b506102da610deb565b61047233610dfb565b6104b1576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b6038805460ff60b81b1916600160b81b179055565b6104cf33610dfb565b61050e576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b610516610a61565b15610558576040805162461bcd60e51b815260206004820152600d60248201526c1512d3881a5cc81b1bd8dad959609a1b604482015290519081900360640190fd5b603580546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f2aeed92123e61fe64748a447c2ba122c4bfc0201d1ed5149e9ce9ede5adda5459181900360200190a150565b60355481906001600160a01b03848116911614156105e5576036546105e0906001600160a01b038581169133911684610e86565b610786565b61060a6103e8603954016106046103e885610ee690919063ffffffff16565b90610f48565b905060006106188383610f8a565b90506001600160a01b0384161561066657603754610645906001600160a01b038681169133911684610e86565b603654610661906001600160a01b038681169133911685610e86565b610731565b8234146106ba576040805162461bcd60e51b815260206004820152601f60248201527f4554482073656e74206973206e6f7420657175616c20746f20616d6f756e7400604482015290519081900360640190fd5b6037546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156106f4573d6000803e3d6000fd5b506036546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561072f573d6000803e3d6000fd5b505b603754604080513381526001600160a01b0392831660208201529186168282015260608201839052517fdd9dfad7b30d6b224e235f89565871419d3dec3b563a4e231f12d2cc97f9acfc9181900360800190a1505b603654604080513381526001600160a01b0392831660208201529185168282015260608201839052517fc8a7b0bd71097b47b2cad75e4e939d2aeb7fae88110e68f93b83fed08e9d3c389181900360800190a1505050565b6038546001600160a01b031690565b600181565b6037546001600160a01b031690565b61080a33610dfb565b610849576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b610851610deb565b156108a3576040805162461bcd60e51b815260206004820152601960248201527f686f6c64657220636f6e7472616374206973206c6f636b656400000000000000604482015290519081900360640190fd5b603780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffa6bae0f250db86534a013b1c7a6c4076aa8f8d1ac248771a1c73f4ba366922a9181900360200190a150565b61090033610dfb565b61093f576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b6038805460ff60b01b1916600160b01b179055565b6038546001600160a01b031633146109b3576040805162461bcd60e51b815260206004820152601860248201527f7468652073656e6465722069736e2774207468652044414f0000000000000000604482015290519081900360640190fd5b806001111580156109c657506103e88111155b610a17576040805162461bcd60e51b815260206004820152601b60248201527f6c6963656e636520616d6f756e74206f7574206f662072616e67650000000000604482015290519081900360640190fd5b60398190556040805182815290517f587b6068be8c555e2cddc6ad8a56df5e8dfb1533cc063d6703f79c791de151489181900360200190a150565b6033546001600160a01b031690565b603854600160b81b900460ff1690565b603854600160a01b900460ff1690565b610a8a33610dfb565b610ac9576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b610ad4838383610fcc565b604080516001600160a01b0380861682528416602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b6035546001600160a01b031690565b6036546001600160a01b031690565b60395490565b6103e881565b610b5633610dfb565b610b95576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b6038805460ff60a01b1916600160a01b179055565b610bb333610dfb565b610bf2576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b610bfa610a71565b15610c3e576040805162461bcd60e51b815260206004820152600f60248201526e199b1bd85d081a5cc81b1bd8dad959608a1b604482015290519081900360640190fd5b603680546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f9af2841b0db134bda87280e2a9cababb156f95023c87023d708a677d61b4b6d89181900360200190a150565b610c9b33610dfb565b610cda576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b6038805460ff60a81b1916600160a81b179055565b60345490565b603854600160b01b900460ff1690565b610d0e33610dfb565b610d4d576040805162461bcd60e51b815260206004820152601660248201526000805160206115d5833981519152604482015290519081900360640190fd5b610d55610cf5565b15610d97576040805162461bcd60e51b815260206004820152600d60248201526c111053c81a5cc81b1bd8dad959609a1b604482015290519081900360640190fd5b603880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fd32c17b277c7e87842861153d758814a267634f4308ec2461f88756df7dd70689181900360200190a150565b603854600160a81b900460ff1690565b6000610e0860345461100b565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e5457600080fd5b505afa158015610e68573d6000803e3d6000fd5b505050506040513d6020811015610e7e57600080fd5b505192915050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610ee090859061112c565b50505050565b600082610ef557506000610f42565b82820282848281610f0257fe5b0414610f3f5760405162461bcd60e51b81526004018080602001828103825260218152602001806115f56021913960400191505060405180910390fd5b90505b92915050565b6000610f3f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506111dd565b6000610f3f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061127f565b6001600160a01b038216610ff257610fed6001600160a01b038416826112d9565b611006565b6110066001600160a01b03831684836113be565b505050565b6033546000906001600160a01b031661106b576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d60208110156110e157600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015610e5457600080fd5b6060611181826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114109092919063ffffffff16565b805190915015611006578080602001905160208110156111a057600080fd5b50516110065760405162461bcd60e51b815260040180806020018281038252602a815260200180611616602a913960400191505060405180910390fd5b600081836112695760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561122e578181015183820152602001611216565b50505050905090810190601f16801561125b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161127557fe5b0495945050505050565b600081848411156112d15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561122e578181015183820152602001611216565b505050900390565b8047101561132e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114611379576040519150601f19603f3d011682016040523d82523d6000602084013e61137e565b606091505b50509050806110065760405162461bcd60e51b815260040180806020018281038252603a81526020018061159b603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261100690849061112c565b606061141f8484600085611427565b949350505050565b606061143285611594565b611483576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106114c25780518252601f1990920191602091820191016114a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611524576040519150601f19603f3d011682016040523d82523d6000602084013e611529565b606091505b5091509150811561153d57915061141f9050565b80511561154d5780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561122e578181015183820152602001611216565b3b15159056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656473656e646572206973206e6f7420616e2061646d696e00000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220c837e1cc343efe2a332d29c185d7cf749962b63a756d2c1039036922403ac70c64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var LicenceBin = "0x6080604052603380546001600160a01b03199081166e0c2e074ec69a0dfb2997ba6c7d2e1e179091557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034556035805490911673aaaf91d9b90df800df4f55c205fd6989c977e73a1790553480156200007857600080fd5b50604051620019e8380380620019e8833981810160405260c08110156200009e57600080fd5b508051602082015160408301516060840151608085015160a090950151939492939192909160018610801590620000d757506103e88611155b62000129576040805162461bcd60e51b815260206004820152601b60248201527f6c6963656e636520616d6f756e74206f7574206f662072616e67650000000000604482015290519081900360640190fd5b6200013482620001a2565b6200013f8162000279565b6039869055603680546001600160a01b038088166001600160a01b0319928316179092556037805487841692169190911790558316156200019657603580546001600160a01b0319166001600160a01b0385161790555b50505050505062000335565b600054610100900460ff1680620001be5750620001be6200032f565b80620001cd575060005460ff16155b6200020a5760405162461bcd60e51b815260040180806020018281038252602e815260200180620019ba602e913960400191505060405180910390fd5b600054610100900460ff1615801562000236576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200026257603380546001600160a01b0319166001600160a01b0384161790555b801562000275576000805461ff00191690555b5050565b600054610100900460ff1680620002955750620002956200032f565b80620002a4575060005460ff16155b620002e15760405162461bcd60e51b815260040180806020018281038252602e815260200180620019ba602e913960400191505060405180910390fd5b600054610100900460ff161580156200030d576000805460ff1961ff0019909116610100171660011790555b811562000262576034829055801562000275576000805461ff00191690555050565b303b1590565b61167580620003456000396000f3fe60806040526004361061014f5760003560e01c8063996cba68116100b6578063d0cddd671161006f578063d0cddd67146103af578063d1696b16146103e2578063e2b4ce97146103f7578063e30c5fa81461040c578063e3d8024214610421578063f15ff4551461045457610156565b8063996cba681461030357806399a5e1d014610346578063a036ba601461035b578063ac904c6314610370578063ca0e2e2014610385578063d08b4ecc1461039a57610156565b806342719faa1161010857806342719faa1461023e5780634ac22b3c1461027157806368ce74e7146102865780637d73b231146102b0578063837c70ef146102c5578063940b9c3b146102ee57610156565b80630bf25c911461015b5780630d42e82f146101725780631b3c96b4146101a55780633a7afe02146101d15780633acec15f14610202578063420a83e71461022957610156565b3661015657005b600080fd5b34801561016757600080fd5b50610170610469565b005b34801561017e57600080fd5b506101706004803603602081101561019557600080fd5b50356001600160a01b03166104c6565b610170600480360360408110156101bb57600080fd5b506001600160a01b0381351690602001356105ac565b3480156101dd57600080fd5b506101e66107de565b604080516001600160a01b039092168252519081900360200190f35b34801561020e57600080fd5b506102176107ed565b60408051918252519081900360200190f35b34801561023557600080fd5b506101e66107f2565b34801561024a57600080fd5b506101706004803603602081101561026157600080fd5b50356001600160a01b0316610801565b34801561027d57600080fd5b506101706108f7565b34801561029257600080fd5b50610170600480360360208110156102a957600080fd5b5035610954565b3480156102bc57600080fd5b506101e6610a52565b3480156102d157600080fd5b506102da610a61565b604080519115158252519081900360200190f35b3480156102fa57600080fd5b506102da610a71565b34801561030f57600080fd5b506101706004803603606081101561032657600080fd5b506001600160a01b03813581169160208101359091169060400135610a81565b34801561035257600080fd5b506101e6610b23565b34801561036757600080fd5b506101e6610b32565b34801561037c57600080fd5b50610217610b41565b34801561039157600080fd5b50610217610b47565b3480156103a657600080fd5b50610170610b4d565b3480156103bb57600080fd5b50610170600480360360208110156103d257600080fd5b50356001600160a01b0316610baa565b3480156103ee57600080fd5b50610170610c92565b34801561040357600080fd5b50610217610cef565b34801561041857600080fd5b506102da610cf5565b34801561042d57600080fd5b506101706004803603602081101561044457600080fd5b50356001600160a01b0316610d05565b34801561046057600080fd5b506102da610deb565b61047233610dfb565b6104b1576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b6038805460ff60b81b1916600160b81b179055565b6104cf33610dfb565b61050e576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b610516610a61565b15610558576040805162461bcd60e51b815260206004820152600d60248201526c1512d3881a5cc81b1bd8dad959609a1b604482015290519081900360640190fd5b603580546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f2aeed92123e61fe64748a447c2ba122c4bfc0201d1ed5149e9ce9ede5adda5459181900360200190a150565b60355481906001600160a01b03848116911614156105e5576036546105e0906001600160a01b038581169133911684610e86565b610786565b61060a6103e8603954016106046103e885610ee690919063ffffffff16565b90610f48565b905060006106188383610f8a565b90506001600160a01b0384161561066657603754610645906001600160a01b038681169133911684610e86565b603654610661906001600160a01b038681169133911685610e86565b610731565b8234146106ba576040805162461bcd60e51b815260206004820152601f60248201527f4554482073656e74206973206e6f7420657175616c20746f20616d6f756e7400604482015290519081900360640190fd5b6037546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156106f4573d6000803e3d6000fd5b506036546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561072f573d6000803e3d6000fd5b505b603754604080513381526001600160a01b0392831660208201529186168282015260608201839052517fdd9dfad7b30d6b224e235f89565871419d3dec3b563a4e231f12d2cc97f9acfc9181900360800190a1505b603654604080513381526001600160a01b0392831660208201529185168282015260608201839052517fc8a7b0bd71097b47b2cad75e4e939d2aeb7fae88110e68f93b83fed08e9d3c389181900360800190a1505050565b6038546001600160a01b031690565b600181565b6037546001600160a01b031690565b61080a33610dfb565b610849576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b610851610deb565b156108a3576040805162461bcd60e51b815260206004820152601960248201527f686f6c64657220636f6e7472616374206973206c6f636b656400000000000000604482015290519081900360640190fd5b603780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517ffa6bae0f250db86534a013b1c7a6c4076aa8f8d1ac248771a1c73f4ba366922a9181900360200190a150565b61090033610dfb565b61093f576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b6038805460ff60b01b1916600160b01b179055565b6038546001600160a01b031633146109b3576040805162461bcd60e51b815260206004820152601860248201527f7468652073656e6465722069736e2774207468652044414f0000000000000000604482015290519081900360640190fd5b806001111580156109c657506103e88111155b610a17576040805162461bcd60e51b815260206004820152601b60248201527f6c6963656e636520616d6f756e74206f7574206f662072616e67650000000000604482015290519081900360640190fd5b60398190556040805182815290517f587b6068be8c555e2cddc6ad8a56df5e8dfb1533cc063d6703f79c791de151489181900360200190a150565b6033546001600160a01b031690565b603854600160b81b900460ff1690565b603854600160a01b900460ff1690565b610a8a33610dfb565b610ac9576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b610ad4838383610fcc565b604080516001600160a01b0380861682528416602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b6035546001600160a01b031690565b6036546001600160a01b031690565b60395490565b6103e881565b610b5633610dfb565b610b95576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b6038805460ff60a01b1916600160a01b179055565b610bb333610dfb565b610bf2576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b610bfa610a71565b15610c3e576040805162461bcd60e51b815260206004820152600f60248201526e199b1bd85d081a5cc81b1bd8dad959608a1b604482015290519081900360640190fd5b603680546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f9af2841b0db134bda87280e2a9cababb156f95023c87023d708a677d61b4b6d89181900360200190a150565b610c9b33610dfb565b610cda576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b6038805460ff60a81b1916600160a81b179055565b60345490565b603854600160b01b900460ff1690565b610d0e33610dfb565b610d4d576040805162461bcd60e51b815260206004820152601360248201526000805160206115f6833981519152604482015290519081900360640190fd5b610d55610cf5565b15610d97576040805162461bcd60e51b815260206004820152600d60248201526c111053c81a5cc81b1bd8dad959609a1b604482015290519081900360640190fd5b603880546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fd32c17b277c7e87842861153d758814a267634f4308ec2461f88756df7dd70689181900360200190a150565b603854600160a81b900460ff1690565b6000610e0860345461100b565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e5457600080fd5b505afa158015610e68573d6000803e3d6000fd5b505050506040513d6020811015610e7e57600080fd5b505192915050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610ee090859061112c565b50505050565b600082610ef557506000610f42565b82820282848281610f0257fe5b0414610f3f5760405162461bcd60e51b81526004018080602001828103825260218152602001806115d56021913960400191505060405180910390fd5b90505b92915050565b6000610f3f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506111dd565b6000610f3f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061127f565b6001600160a01b038216610ff257610fed6001600160a01b038416826112d9565b611006565b6110066001600160a01b03831684836113be565b505050565b6033546000906001600160a01b031661106b576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d60208110156110e157600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015610e5457600080fd5b6060611181826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166114109092919063ffffffff16565b805190915015611006578080602001905160208110156111a057600080fd5b50516110065760405162461bcd60e51b815260040180806020018281038252602a815260200180611616602a913960400191505060405180910390fd5b600081836112695760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561122e578181015183820152602001611216565b50505050905090810190601f16801561125b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161127557fe5b0495945050505050565b600081848411156112d15760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561122e578181015183820152602001611216565b505050900390565b8047101561132e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114611379576040519150601f19603f3d011682016040523d82523d6000602084013e61137e565b606091505b50509050806110065760405162461bcd60e51b815260040180806020018281038252603a81526020018061159b603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261100690849061112c565b606061141f8484600085611427565b949350505050565b606061143285611594565b611483576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106114c25780518252601f1990920191602091820191016114a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611524576040519150601f19603f3d011682016040523d82523d6000602084013e611529565b606091505b5091509150811561153d57915061141f9050565b80511561154d5780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561122e578181015183820152602001611216565b3b15159056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7773656e646572206973206e6f742061646d696e000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122074521ee05d521d137e33bf68500ede1dd58c0ceb5930a843d1a6ad105a4dee7164736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployLicence deploys a new Ethereum contract, binding an instance of Licence to it. func DeployLicence(auth *bind.TransactOpts, backend bind.ContractBackend, _licence_ *big.Int, _float_ common.Address, _holder_ common.Address, _tknAddress_ common.Address, _ens_ common.Address, _controllerNode_ [32]byte) (common.Address, *types.Transaction, *Licence, error) { diff --git a/pkg/bindings/mocks/gasBurner.go b/pkg/bindings/mocks/gasBurner.go index 766763b3..a0d11019 100644 --- a/pkg/bindings/mocks/gasBurner.go +++ b/pkg/bindings/mocks/gasBurner.go @@ -31,7 +31,7 @@ var ( const GasBurnerABI = "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"burn\",\"type\":\"uint256\"}],\"name\":\"burnGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dummy\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}]" // GasBurnerBin is the compiled bytecode used for deploying new contracts. -var GasBurnerBin = "0x6080604052348015600f57600080fd5b5060ab8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806332e43a111460375780634ad5d16f14603f575b600080fd5b603d6059565b005b603d60048036036020811015605357600080fd5b5035605b565bfe5b6332e43a1160e01b60005260008060046000803086f1505056fea2646970667358221220ab9b83092a8d64d01e2d8637b5ff40b00935b413ea8be9d23e20e67e2b764ae764736f6c634300060b0033" +var GasBurnerBin = "0x6080604052348015600f57600080fd5b5060ab8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806332e43a111460375780634ad5d16f14603f575b600080fd5b603d6059565b005b603d60048036036020811015605357600080fd5b5035605b565bfe5b6332e43a1160e01b60005260008060046000803086f1505056fea26469706673582212202c860f79554b7bc7d54ead648ade9fbf8058988df9ff264b1fdeb75fdbab6c5364736f6c634300060c0033" // DeployGasBurner deploys a new Ethereum contract, binding an instance of GasBurner to it. func DeployGasBurner(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GasBurner, error) { diff --git a/pkg/bindings/mocks/gasToken.go b/pkg/bindings/mocks/gasToken.go index 0718591f..33ba17b8 100644 --- a/pkg/bindings/mocks/gasToken.go +++ b/pkg/bindings/mocks/gasToken.go @@ -31,7 +31,7 @@ var ( const GasTokenABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"free\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"freeUpTo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBurned\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"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\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // GasTokenBin is the compiled bytecode used for deploying new contracts. -var GasTokenBin = "0x608060405234801561001057600080fd5b50610675806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2309ff81161005b578063a2309ff814610109578063a9059cbb14610111578063d89135cd1461013d578063d8ccd0f31461014557610088565b806318160ddd1461008d5780636366b936146100a757806370a08231146100c4578063a0712d68146100ea575b600080fd5b610095610162565b60408051918252519081900360200190f35b610095600480360360208110156100bd57600080fd5b503561016c565b610095600480360360208110156100da57600080fd5b50356001600160a01b031661018e565b6101076004803603602081101561010057600080fd5b50356101a9565b005b61009561037e565b6101076004803603604081101561012757600080fd5b506001600160a01b038135169060200135610384565b6100956103f6565b6100956004803603602081101561015b57600080fd5b50356103fc565b6001546000540390565b60006101886101838361017e3361018e565b61041b565b6103fc565b92915050565b6001600160a01b031660009081526002602052604090205490565b600080547f766ffa233a79675b0530301caf58abcfa2eb3318585733ff60005260176009f3909152602082045b801561034957816020600080f550600182016020600080f550600282016020600080f550600382016020600080f550600482016020600080f550600582016020600080f550600682016020600080f550600782016020600080f550600882016020600080f550600982016020600080f550600a82016020600080f550600b82016020600080f550600c82016020600080f550600d82016020600080f550600e82016020600080f550600f82016020600080f550601082016020600080f550601182016020600080f550601282016020600080f550601382016020600080f550601482016020600080f550601582016020600080f550601682016020600080f550601782016020600080f550601882016020600080f550601982016020600080f550601a82016020600080f550601b82016020600080f550601c82016020600080f550601d82016020600080f550601e82016020600080f550601f82016020600080f55060209190910190600019016101d6565b50601f82165b801561036d57816020600080f550600191909101906000190161034f565b506103783383610433565b60005550565b60005481565b336000908152600260205260409020546103a4908263ffffffff61045c16565b33600090815260026020526040808220929092556001600160a01b038416815220546103d6908263ffffffff61049e16565b6001600160a01b0390921660009081526002602052604090209190915550565b60015481565b600081156104175761040e33836104f8565b61041782610521565b5090565b600081831061042a578161042c565b825b9392505050565b6001600160a01b0382166000908152600260205260409020546103d6908263ffffffff61049e16565b600061042c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506105a8565b60008282018381101561042c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600260205260409020546103d6908263ffffffff61045c16565b600154818101806001556040517fff00000000fa233a79675b0530301caf58abcfa2eb000000000000000000000081527f841da0d3b4b49d75c2a11068e21bceeb2e5d8c9e31ab7cea45c9ce114a2033dc6035820152601581015b828410156105a1578381526000806000806000605587205af15060018401935061057c565b5050505050565b600081848411156106375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105fc5781810151838201526020016105e4565b50505050905090810190601f1680156106295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea26469706673582212209a19aaf243b6caa5d2cb30de07f2a0bf726396d9cb5a685cf78e2c2e9d8f32d864736f6c634300060b0033" +var GasTokenBin = "0x608060405234801561001057600080fd5b5061065d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2309ff81161005b578063a2309ff814610109578063a9059cbb14610111578063d89135cd1461013d578063d8ccd0f31461014557610088565b806318160ddd1461008d5780636366b936146100a757806370a08231146100c4578063a0712d68146100ea575b600080fd5b610095610162565b60408051918252519081900360200190f35b610095600480360360208110156100bd57600080fd5b503561016c565b610095600480360360208110156100da57600080fd5b50356001600160a01b031661018e565b6101076004803603602081101561010057600080fd5b50356101a9565b005b61009561037e565b6101076004803603604081101561012757600080fd5b506001600160a01b038135169060200135610384565b6100956103ea565b6100956004803603602081101561015b57600080fd5b50356103f0565b6001546000540390565b60006101886101838361017e3361018e565b61040f565b6103f0565b92915050565b6001600160a01b031660009081526002602052604090205490565b600080547f766ffa233a79675b0530301caf58abcfa2eb3318585733ff60005260176009f3909152602082045b801561034957816020600080f550600182016020600080f550600282016020600080f550600382016020600080f550600482016020600080f550600582016020600080f550600682016020600080f550600782016020600080f550600882016020600080f550600982016020600080f550600a82016020600080f550600b82016020600080f550600c82016020600080f550600d82016020600080f550600e82016020600080f550600f82016020600080f550601082016020600080f550601182016020600080f550601282016020600080f550601382016020600080f550601482016020600080f550601582016020600080f550601682016020600080f550601782016020600080f550601882016020600080f550601982016020600080f550601a82016020600080f550601b82016020600080f550601c82016020600080f550601d82016020600080f550601e82016020600080f550601f82016020600080f55060209190910190600019016101d6565b50601f82165b801561036d57816020600080f550600191909101906000190161034f565b506103783383610427565b60005550565b60005481565b3360009081526002602052604090205461039e908261044a565b33600090815260026020526040808220929092556001600160a01b038416815220546103ca908261048c565b6001600160a01b0390921660009081526002602052604090209190915550565b60015481565b6000811561040b5761040233836104e6565b61040b82610509565b5090565b600081831061041e5781610420565b825b9392505050565b6001600160a01b0382166000908152600260205260409020546103ca908261048c565b600061042083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610590565b600082820183811015610420576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600260205260409020546103ca908261044a565b600154818101806001556040517fff00000000fa233a79675b0530301caf58abcfa2eb000000000000000000000081527f841da0d3b4b49d75c2a11068e21bceeb2e5d8c9e31ab7cea45c9ce114a2033dc6035820152601581015b82841015610589578381526000806000806000605587205af150600184019350610564565b5050505050565b6000818484111561061f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105e45781810151838201526020016105cc565b50505050905090810190601f1680156106115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea26469706673582212201748fa158d2b2af8096cdc3480876d3eba568ab01442138784ba1c3bb6a7c8a664736f6c634300060c0033" // DeployGasToken deploys a new Ethereum contract, binding an instance of GasToken to it. func DeployGasToken(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GasToken, error) { diff --git a/pkg/bindings/mocks/isValidSignatureExporter.go b/pkg/bindings/mocks/isValidSignatureExporter.go index 3de7e857..9404b5dc 100644 --- a/pkg/bindings/mocks/isValidSignatureExporter.go +++ b/pkg/bindings/mocks/isValidSignatureExporter.go @@ -31,7 +31,7 @@ var ( const IsValidSignatureExporterABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // IsValidSignatureExporterBin is the compiled bytecode used for deploying new contracts. -var IsValidSignatureExporterBin = "0x608060405234801561001057600080fd5b506040516102843803806102848339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b031990921691909117905561021f806100656000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806320c13b0b14610030575b600080fd5b6100f26004803603604081101561004657600080fd5b81019060208101813564010000000081111561006157600080fd5b82018360208201111561007357600080fd5b8035906020019184600183028401116401000000008311171561009557600080fd5b9193909290916020810190356401000000008111156100b357600080fd5b8201836020820111156100c557600080fd5b803590602001918460018302840111640100000000831117156100e757600080fd5b50909250905061010f565b604080516001600160e01b03199092168252519081900360200190f35b60008054604080516320c13b0b60e01b815260048101918252604481018790526001600160a01b03909216916320c13b0b9188918891889188919081906024810190606401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f820116905080830192505050965050505050505060206040518083038186803b1580156101b457600080fd5b505afa1580156101c8573d6000803e3d6000fd5b505050506040513d60208110156101de57600080fd5b50519594505050505056fea26469706673582212206e19f853f4d2b5df7659558782b485c19ef0ab1fa13a3ee6abcf36eb8f920b2664736f6c634300060c0033" +var IsValidSignatureExporterBin = "0x608060405234801561001057600080fd5b506040516102843803806102848339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b031990921691909117905561021f806100656000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806320c13b0b14610030575b600080fd5b6100f26004803603604081101561004657600080fd5b81019060208101813564010000000081111561006157600080fd5b82018360208201111561007357600080fd5b8035906020019184600183028401116401000000008311171561009557600080fd5b9193909290916020810190356401000000008111156100b357600080fd5b8201836020820111156100c557600080fd5b803590602001918460018302840111640100000000831117156100e757600080fd5b50909250905061010f565b604080516001600160e01b03199092168252519081900360200190f35b60008054604080516320c13b0b60e01b815260048101918252604481018790526001600160a01b03909216916320c13b0b9188918891889188919081906024810190606401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f820116905080830192505050965050505050505060206040518083038186803b1580156101b457600080fd5b505afa1580156101c8573d6000803e3d6000fd5b505050506040513d60208110156101de57600080fd5b50519594505050505056fea26469706673582212204a5c6f4facf4ad8ce6ee34ef9ff378337a84701edc00890a0c10fb3c1dcf9fb264736f6c634300060c0033" // DeployIsValidSignatureExporter deploys a new Ethereum contract, binding an instance of IsValidSignatureExporter to it. func DeployIsValidSignatureExporter(auth *bind.TransactOpts, backend bind.ContractBackend, _wallet common.Address) (common.Address, *types.Transaction, *IsValidSignatureExporter, error) { diff --git a/pkg/bindings/mocks/tokenWhitelistableExporter.go b/pkg/bindings/mocks/tokenWhitelistableExporter.go index 1dbe3a38..ee70638c 100644 --- a/pkg/bindings/mocks/tokenWhitelistableExporter.go +++ b/pkg/bindings/mocks/tokenWhitelistableExporter.go @@ -31,7 +31,7 @@ var ( const TokenWhitelistableExporterABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getERC20RecipientAndAmount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStablecoinInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_a\",\"type\":\"address\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_a\",\"type\":\"address\"}],\"name\":\"isTokenAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_a\",\"type\":\"address\"}],\"name\":\"isTokenLoadable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_a\",\"type\":\"address\"}],\"name\":\"isTokenRedeemable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"redeemableTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_updateDate\",\"type\":\"uint256\"}],\"name\":\"updateTokenRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // TokenWhitelistableExporterBin is the compiled bytecode used for deploying new contracts. -var TokenWhitelistableExporterBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966034553480156200005657600080fd5b5060405162000ea438038062000ea4833981810160405260408110156200007c57600080fd5b5080516020909101516200009082620000a3565b6200009b816200017a565b505062000236565b600054610100900460ff1680620000bf5750620000bf62000230565b80620000ce575060005460ff16155b6200010b5760405162461bcd60e51b815260040180806020018281038252602e81526020018062000e76602e913960400191505060405180910390fd5b600054610100900460ff1615801562000137576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200016357603380546001600160a01b0319166001600160a01b0384161790555b801562000176576000805461ff00191690555b5050565b600054610100900460ff16806200019657506200019662000230565b80620001a5575060005460ff16155b620001e25760405162461bcd60e51b815260040180806020018281038252602e81526020018062000e76602e913960400191505060405180910390fd5b600054610100900460ff161580156200020e576000805460ff1961ff0019909116610100171660011790555b811562000163576034829055801562000176576000805461ff00191690555050565b303b1590565b610c3080620002466000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806344b049bc1161007157806344b049bc1461023c5780637d73b23114610244578063877337b014610268578063afc72e9314610282578063d545782e14610323578063dcc922bc14610357576100a9565b806317e73794146100ae5780631f69565f146100e85780632ff0fcaa146101b65780633efec5e9146101dc578063443dd2a4146101e4575b600080fd5b6100d4600480360360208110156100c457600080fd5b50356001600160a01b031661037d565b604080519115158252519081900360200190f35b61010e600480360360208110156100fe57600080fd5b50356001600160a01b031661038e565b6040518080602001888152602001878152602001861515815260200185151581526020018415158152602001838152602001828103825289818151815260200191508051906020019080838360005b8381101561017557818101518382015260200161015d565b50505050905090810190601f1680156101a25780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b6100d4600480360360208110156101cc57600080fd5b50356001600160a01b03166103b9565b61010e6103c4565b6101ec6103ed565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610228578181015183820152602001610210565b505050509050019250505060405180910390f35b6101ec6103fc565b61024c610406565b604080516001600160a01b039092168252519081900360200190f35b610270610415565b60408051918252519081900360200190f35b6103006004803603604081101561029857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460018302840111600160201b831117156102f557600080fd5b50909250905061041b565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103556004803603606081101561033957600080fd5b506001600160a01b03813516906020810135906040013561046a565b005b6100d46004803603602081101561036d57600080fd5b50356001600160a01b031661047a565b600061038882610485565b92915050565b60606000806000806000806103a28861049f565b959e949d50929b5090995097509550909350915050565b600061038882610628565b60606000806000806000806103d7610642565b959d949c50929a50909850965094509092509050565b60606103f76107b1565b905090565b60606103f76108c2565b6033546001600160a01b031690565b60345490565b60008061045e8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061090792505050565b91509150935093915050565b610475838383610a08565b505050565b600061038882610a8e565b6000806104918361049f565b509098975050505050505050565b60606000806000806000806104b5603454610aa7565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561053e57600080fd5b8101908080516040519392919084600160201b82111561055d57600080fd5b90830190602082018581111561057257600080fd5b8251600160201b81118282018810171561058b57600080fd5b82525081516020918201929091019080838360005b838110156105b85781810151838201526020016105a0565b50505050905090810190601f1680156105e55780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b6000806106348361049f565b509198975050505050505050565b6060600080600080600080610658603454610aa7565b6001600160a01b0316633efec5e96040518163ffffffff1660e01b815260040160006040518083038186803b15801561069057600080fd5b505afa1580156106a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e08110156106cd57600080fd5b8101908080516040519392919084600160201b8211156106ec57600080fd5b90830190602082018581111561070157600080fd5b8251600160201b81118282018810171561071a57600080fd5b82525081516020918201929091019080838360005b8381101561074757818101518382015260200161072f565b50505050905090810190601f1680156107745780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979f939e50919c509a5098509096509294509192505050565b60606107be603454610aa7565b6001600160a01b031663443dd2a46040518163ffffffff1660e01b815260040160006040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561083357600080fd5b8101908080516040519392919084600160201b82111561085257600080fd5b90830190602082018581111561086757600080fd5b82518660208202830111600160201b8211171561088357600080fd5b82525081516020918201928201910280838360005b838110156108b0578181015183820152602001610898565b50505050905001604052505050905090565b60606108cf603454610aa7565b6001600160a01b03166344b049bc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156107f657600080fd5b600080610915603454610aa7565b6001600160a01b031663afc72e9385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610980578181015183820152602001610968565b50505050905090810190601f1680156109ad5780820380516001836020036101000a031916815260200191505b509350505050604080518083038186803b1580156109ca57600080fd5b505afa1580156109de573d6000803e3d6000fd5b505050506040513d60408110156109f457600080fd5b508051602090910151909590945092505050565b610a13603454610aa7565b6001600160a01b031663d545782e8484846040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015610a7157600080fd5b505af1158015610a85573d6000803e3d6000fd5b50505050505050565b600080610a9a8361049f565b5098975050505050505050565b6033546000906001600160a01b0316610b07576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015610b5357600080fd5b505afa158015610b67573d6000803e3d6000fd5b505050506040513d6020811015610b7d57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015610bc857600080fd5b505afa158015610bdc573d6000803e3d6000fd5b505050506040513d6020811015610bf257600080fd5b50519291505056fea264697066735822122075a81a34c79c35ad4029a7d44a9bcd4546b8a482b12b1b64096fc8303a17ff3b64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var TokenWhitelistableExporterBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966034553480156200005657600080fd5b5060405162000ea438038062000ea4833981810160405260408110156200007c57600080fd5b5080516020909101516200009082620000a3565b6200009b816200017a565b505062000236565b600054610100900460ff1680620000bf5750620000bf62000230565b80620000ce575060005460ff16155b6200010b5760405162461bcd60e51b815260040180806020018281038252602e81526020018062000e76602e913960400191505060405180910390fd5b600054610100900460ff1615801562000137576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200016357603380546001600160a01b0319166001600160a01b0384161790555b801562000176576000805461ff00191690555b5050565b600054610100900460ff16806200019657506200019662000230565b80620001a5575060005460ff16155b620001e25760405162461bcd60e51b815260040180806020018281038252602e81526020018062000e76602e913960400191505060405180910390fd5b600054610100900460ff161580156200020e576000805460ff1961ff0019909116610100171660011790555b811562000163576034829055801562000176576000805461ff00191690555050565b303b1590565b610c3080620002466000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806344b049bc1161007157806344b049bc1461023c5780637d73b23114610244578063877337b014610268578063afc72e9314610282578063d545782e14610323578063dcc922bc14610357576100a9565b806317e73794146100ae5780631f69565f146100e85780632ff0fcaa146101b65780633efec5e9146101dc578063443dd2a4146101e4575b600080fd5b6100d4600480360360208110156100c457600080fd5b50356001600160a01b031661037d565b604080519115158252519081900360200190f35b61010e600480360360208110156100fe57600080fd5b50356001600160a01b031661038e565b6040518080602001888152602001878152602001861515815260200185151581526020018415158152602001838152602001828103825289818151815260200191508051906020019080838360005b8381101561017557818101518382015260200161015d565b50505050905090810190601f1680156101a25780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b6100d4600480360360208110156101cc57600080fd5b50356001600160a01b03166103b9565b61010e6103c4565b6101ec6103ed565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610228578181015183820152602001610210565b505050509050019250505060405180910390f35b6101ec6103fc565b61024c610406565b604080516001600160a01b039092168252519081900360200190f35b610270610415565b60408051918252519081900360200190f35b6103006004803603604081101561029857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460018302840111600160201b831117156102f557600080fd5b50909250905061041b565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103556004803603606081101561033957600080fd5b506001600160a01b03813516906020810135906040013561046a565b005b6100d46004803603602081101561036d57600080fd5b50356001600160a01b031661047a565b600061038882610485565b92915050565b60606000806000806000806103a28861049f565b959e949d50929b5090995097509550909350915050565b600061038882610628565b60606000806000806000806103d7610642565b959d949c50929a50909850965094509092509050565b60606103f76107b1565b905090565b60606103f76108c2565b6033546001600160a01b031690565b60345490565b60008061045e8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061090792505050565b91509150935093915050565b610475838383610a08565b505050565b600061038882610a8e565b6000806104918361049f565b509098975050505050505050565b60606000806000806000806104b5603454610aa7565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561053e57600080fd5b8101908080516040519392919084600160201b82111561055d57600080fd5b90830190602082018581111561057257600080fd5b8251600160201b81118282018810171561058b57600080fd5b82525081516020918201929091019080838360005b838110156105b85781810151838201526020016105a0565b50505050905090810190601f1680156105e55780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b6000806106348361049f565b509198975050505050505050565b6060600080600080600080610658603454610aa7565b6001600160a01b0316633efec5e96040518163ffffffff1660e01b815260040160006040518083038186803b15801561069057600080fd5b505afa1580156106a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e08110156106cd57600080fd5b8101908080516040519392919084600160201b8211156106ec57600080fd5b90830190602082018581111561070157600080fd5b8251600160201b81118282018810171561071a57600080fd5b82525081516020918201929091019080838360005b8381101561074757818101518382015260200161072f565b50505050905090810190601f1680156107745780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979f939e50919c509a5098509096509294509192505050565b60606107be603454610aa7565b6001600160a01b031663443dd2a46040518163ffffffff1660e01b815260040160006040518083038186803b1580156107f657600080fd5b505afa15801561080a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561083357600080fd5b8101908080516040519392919084600160201b82111561085257600080fd5b90830190602082018581111561086757600080fd5b82518660208202830111600160201b8211171561088357600080fd5b82525081516020918201928201910280838360005b838110156108b0578181015183820152602001610898565b50505050905001604052505050905090565b60606108cf603454610aa7565b6001600160a01b03166344b049bc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156107f657600080fd5b600080610915603454610aa7565b6001600160a01b031663afc72e9385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610980578181015183820152602001610968565b50505050905090810190601f1680156109ad5780820380516001836020036101000a031916815260200191505b509350505050604080518083038186803b1580156109ca57600080fd5b505afa1580156109de573d6000803e3d6000fd5b505050506040513d60408110156109f457600080fd5b508051602090910151909590945092505050565b610a13603454610aa7565b6001600160a01b031663d545782e8484846040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015610a7157600080fd5b505af1158015610a85573d6000803e3d6000fd5b50505050505050565b600080610a9a8361049f565b5098975050505050505050565b6033546000906001600160a01b0316610b07576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015610b5357600080fd5b505afa158015610b67573d6000803e3d6000fd5b505050506040513d6020811015610b7d57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015610bc857600080fd5b505afa158015610bdc573d6000803e3d6000fd5b505050506040513d6020811015610bf257600080fd5b50519291505056fea264697066735822122072c550a038b47a13cb1b4fd66133c76d08fd6b459370a80bb3bb49ce183f906864736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployTokenWhitelistableExporter deploys a new Ethereum contract, binding an instance of TokenWhitelistableExporter to it. func DeployTokenWhitelistableExporter(auth *bind.TransactOpts, backend bind.ContractBackend, _ens_ common.Address, _tokenWhitelistNode_ [32]byte) (common.Address, *types.Transaction, *TokenWhitelistableExporter, error) { diff --git a/pkg/bindings/mocks/wallet.go b/pkg/bindings/mocks/wallet.go index cb0bff07..8eda5692 100644 --- a/pkg/bindings/mocks/wallet.go +++ b/pkg/bindings/mocks/wallet.go @@ -31,7 +31,7 @@ var ( const WalletABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"ConfirmedOperation\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"confirmOperation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"sendValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]" // WalletBin is the compiled bytecode used for deploying new contracts. -var WalletBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d589369760345534801561005557600080fd5b506040516106ee3803806106ee8339818101604052604081101561007857600080fd5b50805160209091015161008a8261009a565b61009381610168565b505061021b565b600054610100900460ff16806100b357506100b3610215565b806100c1575060005460ff16155b6100fc5760405162461bcd60e51b815260040180806020018281038252602e8152602001806106c0602e913960400191505060405180910390fd5b600054610100900460ff16158015610127576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382161561015257603380546001600160a01b0319166001600160a01b0384161790555b8015610164576000805461ff00191690555b5050565b600054610100900460ff16806101815750610181610215565b8061018f575060005460ff16155b6101ca5760405162461bcd60e51b815260040180806020018281038252602e8152602001806106c0602e913960400191505060405180910390fd5b600054610100900460ff161580156101f5576000805460ff1961ff0019909116610100171660011790555b81156101525760348290558015610164576000805461ff00191690555050565b303b1590565b6104968061022a6000396000f3fe60806040526004361061004e5760003560e01c806324a084df1461005a5780636945341f146100955780637d73b231146100aa578063a9059cbb146100db578063e2b4ce971461011457610055565b3661005557005b600080fd5b34801561006657600080fd5b506100936004803603604081101561007d57600080fd5b506001600160a01b03813516906020013561013b565b005b3480156100a157600080fd5b506100936101d9565b3480156100b657600080fd5b506100bf610269565b604080516001600160a01b039092168252519081900360200190f35b3480156100e757600080fd5b50610093600480360360408110156100fe57600080fd5b506001600160a01b038135169060200135610278565b34801561012057600080fd5b506101296102ae565b60408051918252519081900360200190f35b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610186576040519150601f19603f3d011682016040523d82523d6000602084013e61018b565b606091505b50509050806101d4576040805162461bcd60e51b815260206004820152601060248201526f1cd95b9915985b1d594819985a5b195960821b604482015290519081900360640190fd5b505050565b6101e2336102b4565b610233576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b604080516001815290517f0e8fe5b3baccd13c21d6a20906753a2bbcd86f70d69f4bde83f4e38cf3aae12b9181900360200190a1565b6033546001600160a01b031690565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156101d4573d6000803e3d6000fd5b60345490565b60006102c160345461033f565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561030d57600080fd5b505afa158015610321573d6000803e3d6000fd5b505050506040513d602081101561033757600080fd5b505192915050565b6033546000906001600160a01b031661039f576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156103eb57600080fd5b505afa1580156103ff573d6000803e3d6000fd5b505050506040513d602081101561041557600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561030d57600080fdfea26469706673582212200a07d028750f95f8874dfbf976f9e9d83697beb6de91cb141b151c4351dde1d064736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var WalletBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d589369760345534801561005557600080fd5b506040516106ee3803806106ee8339818101604052604081101561007857600080fd5b50805160209091015161008a8261009a565b61009381610168565b505061021b565b600054610100900460ff16806100b357506100b3610215565b806100c1575060005460ff16155b6100fc5760405162461bcd60e51b815260040180806020018281038252602e8152602001806106c0602e913960400191505060405180910390fd5b600054610100900460ff16158015610127576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382161561015257603380546001600160a01b0319166001600160a01b0384161790555b8015610164576000805461ff00191690555b5050565b600054610100900460ff16806101815750610181610215565b8061018f575060005460ff16155b6101ca5760405162461bcd60e51b815260040180806020018281038252602e8152602001806106c0602e913960400191505060405180910390fd5b600054610100900460ff161580156101f5576000805460ff1961ff0019909116610100171660011790555b81156101525760348290558015610164576000805461ff00191690555050565b303b1590565b6104968061022a6000396000f3fe60806040526004361061004e5760003560e01c806324a084df1461005a5780636945341f146100955780637d73b231146100aa578063a9059cbb146100db578063e2b4ce971461011457610055565b3661005557005b600080fd5b34801561006657600080fd5b506100936004803603604081101561007d57600080fd5b506001600160a01b03813516906020013561013b565b005b3480156100a157600080fd5b506100936101d9565b3480156100b657600080fd5b506100bf610269565b604080516001600160a01b039092168252519081900360200190f35b3480156100e757600080fd5b50610093600480360360408110156100fe57600080fd5b506001600160a01b038135169060200135610278565b34801561012057600080fd5b506101296102ae565b60408051918252519081900360200190f35b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114610186576040519150601f19603f3d011682016040523d82523d6000602084013e61018b565b606091505b50509050806101d4576040805162461bcd60e51b815260206004820152601060248201526f1cd95b9915985b1d594819985a5b195960821b604482015290519081900360640190fd5b505050565b6101e2336102b4565b610233576040805162461bcd60e51b815260206004820152601860248201527f73656e646572206973206e6f7420636f6e74726f6c6c65720000000000000000604482015290519081900360640190fd5b604080516001815290517f0e8fe5b3baccd13c21d6a20906753a2bbcd86f70d69f4bde83f4e38cf3aae12b9181900360200190a1565b6033546001600160a01b031690565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156101d4573d6000803e3d6000fd5b60345490565b60006102c160345461033f565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561030d57600080fd5b505afa158015610321573d6000803e3d6000fd5b505050506040513d602081101561033757600080fd5b505192915050565b6033546000906001600160a01b031661039f576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156103eb57600080fd5b505afa1580156103ff573d6000803e3d6000fd5b505050506040513d602081101561041557600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561030d57600080fdfea2646970667358221220259def7a8363f7486ea160a0c1e624439b03b0651b2f5fb80016285131b8190e64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployWallet deploys a new Ethereum contract, binding an instance of Wallet to it. func DeployWallet(auth *bind.TransactOpts, backend bind.ContractBackend, _ens_ common.Address, _controllerNode_ [32]byte) (common.Address, *types.Transaction, *Wallet, error) { diff --git a/pkg/bindings/mocks/walletMock.go b/pkg/bindings/mocks/walletMock.go deleted file mode 100644 index d0cfd324..00000000 --- a/pkg/bindings/mocks/walletMock.go +++ /dev/null @@ -1,232 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package mocks - -import ( - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = abi.U256 - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// WalletMockABI is the input ABI used to generate the binding from. -const WalletMockABI = "[{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"sendValue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" - -// WalletMockBin is the compiled bytecode used for deploying new contracts. -var WalletMockBin = "0x608060405234801561001057600080fd5b506101a6806100206000396000f3fe6080604052600436106100295760003560e01c806324a084df1461002b578063a9059cbb14610064575b005b34801561003757600080fd5b506100296004803603604081101561004e57600080fd5b506001600160a01b03813516906020013561009d565b34801561007057600080fd5b506100296004803603604081101561008757600080fd5b506001600160a01b03813516906020013561013b565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146100e8576040519150601f19603f3d011682016040523d82523d6000602084013e6100ed565b606091505b5050905080610136576040805162461bcd60e51b815260206004820152601060248201526f1cd95b9915985b1d594819985a5b195960821b604482015290519081900360640190fd5b505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610136573d6000803e3d6000fdfea265627a7a723158209bf75575882e443e2c6513fa2009869a2f6288df81bb1ccd5e5c74fa7500456364736f6c63430005110032" - -// DeployWalletMock deploys a new Ethereum contract, binding an instance of WalletMock to it. -func DeployWalletMock(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WalletMock, error) { - parsed, err := abi.JSON(strings.NewReader(WalletMockABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(WalletMockBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &WalletMock{WalletMockCaller: WalletMockCaller{contract: contract}, WalletMockTransactor: WalletMockTransactor{contract: contract}, WalletMockFilterer: WalletMockFilterer{contract: contract}}, nil -} - -// WalletMock is an auto generated Go binding around an Ethereum contract. -type WalletMock struct { - WalletMockCaller // Read-only binding to the contract - WalletMockTransactor // Write-only binding to the contract - WalletMockFilterer // Log filterer for contract events -} - -// WalletMockCaller is an auto generated read-only Go binding around an Ethereum contract. -type WalletMockCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// WalletMockTransactor is an auto generated write-only Go binding around an Ethereum contract. -type WalletMockTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// WalletMockFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type WalletMockFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// WalletMockSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type WalletMockSession struct { - Contract *WalletMock // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// WalletMockCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type WalletMockCallerSession struct { - Contract *WalletMockCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// WalletMockTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type WalletMockTransactorSession struct { - Contract *WalletMockTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// WalletMockRaw is an auto generated low-level Go binding around an Ethereum contract. -type WalletMockRaw struct { - Contract *WalletMock // Generic contract binding to access the raw methods on -} - -// WalletMockCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type WalletMockCallerRaw struct { - Contract *WalletMockCaller // Generic read-only contract binding to access the raw methods on -} - -// WalletMockTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type WalletMockTransactorRaw struct { - Contract *WalletMockTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewWalletMock creates a new instance of WalletMock, bound to a specific deployed contract. -func NewWalletMock(address common.Address, backend bind.ContractBackend) (*WalletMock, error) { - contract, err := bindWalletMock(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &WalletMock{WalletMockCaller: WalletMockCaller{contract: contract}, WalletMockTransactor: WalletMockTransactor{contract: contract}, WalletMockFilterer: WalletMockFilterer{contract: contract}}, nil -} - -// NewWalletMockCaller creates a new read-only instance of WalletMock, bound to a specific deployed contract. -func NewWalletMockCaller(address common.Address, caller bind.ContractCaller) (*WalletMockCaller, error) { - contract, err := bindWalletMock(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &WalletMockCaller{contract: contract}, nil -} - -// NewWalletMockTransactor creates a new write-only instance of WalletMock, bound to a specific deployed contract. -func NewWalletMockTransactor(address common.Address, transactor bind.ContractTransactor) (*WalletMockTransactor, error) { - contract, err := bindWalletMock(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &WalletMockTransactor{contract: contract}, nil -} - -// NewWalletMockFilterer creates a new log filterer instance of WalletMock, bound to a specific deployed contract. -func NewWalletMockFilterer(address common.Address, filterer bind.ContractFilterer) (*WalletMockFilterer, error) { - contract, err := bindWalletMock(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &WalletMockFilterer{contract: contract}, nil -} - -// bindWalletMock binds a generic wrapper to an already deployed contract. -func bindWalletMock(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(WalletMockABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_WalletMock *WalletMockRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _WalletMock.Contract.WalletMockCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_WalletMock *WalletMockRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _WalletMock.Contract.WalletMockTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_WalletMock *WalletMockRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _WalletMock.Contract.WalletMockTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_WalletMock *WalletMockCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _WalletMock.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_WalletMock *WalletMockTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _WalletMock.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_WalletMock *WalletMockTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _WalletMock.Contract.contract.Transact(opts, method, params...) -} - -// SendValue is a paid mutator transaction binding the contract method 0x24a084df. -// -// Solidity: function sendValue(address _to, uint256 _amount) returns() -func (_WalletMock *WalletMockTransactor) SendValue(opts *bind.TransactOpts, _to common.Address, _amount *big.Int) (*types.Transaction, error) { - return _WalletMock.contract.Transact(opts, "sendValue", _to, _amount) -} - -// SendValue is a paid mutator transaction binding the contract method 0x24a084df. -// -// Solidity: function sendValue(address _to, uint256 _amount) returns() -func (_WalletMock *WalletMockSession) SendValue(_to common.Address, _amount *big.Int) (*types.Transaction, error) { - return _WalletMock.Contract.SendValue(&_WalletMock.TransactOpts, _to, _amount) -} - -// SendValue is a paid mutator transaction binding the contract method 0x24a084df. -// -// Solidity: function sendValue(address _to, uint256 _amount) returns() -func (_WalletMock *WalletMockTransactorSession) SendValue(_to common.Address, _amount *big.Int) (*types.Transaction, error) { - return _WalletMock.Contract.SendValue(&_WalletMock.TransactOpts, _to, _amount) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address _to, uint256 _amount) returns() -func (_WalletMock *WalletMockTransactor) Transfer(opts *bind.TransactOpts, _to common.Address, _amount *big.Int) (*types.Transaction, error) { - return _WalletMock.contract.Transact(opts, "transfer", _to, _amount) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address _to, uint256 _amount) returns() -func (_WalletMock *WalletMockSession) Transfer(_to common.Address, _amount *big.Int) (*types.Transaction, error) { - return _WalletMock.Contract.Transfer(&_WalletMock.TransactOpts, _to, _amount) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address _to, uint256 _amount) returns() -func (_WalletMock *WalletMockTransactorSession) Transfer(_to common.Address, _amount *big.Int) (*types.Transaction, error) { - return _WalletMock.Contract.Transfer(&_WalletMock.TransactOpts, _to, _amount) -} diff --git a/pkg/bindings/oracle.go b/pkg/bindings/oracle.go index b3991876..eba3ce26 100644 --- a/pkg/bindings/oracle.go +++ b/pkg/bindings/oracle.go @@ -31,7 +31,7 @@ var ( const OracleABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_publicKey\",\"type\":\"bytes\"}],\"name\":\"SetCryptoComparePublicKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_publicKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_result\",\"type\":\"string\"}],\"name\":\"VerifiedProof\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_result\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"UpdateTokenRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cryptoCompareAPIPublicKey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_publicKey\",\"type\":\"bytes\"}],\"name\":\"updateCryptoCompareAPIPublicKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // OracleBin is the compiled bytecode used for deploying new contracts. -var OracleBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966035553480156200007a57600080fd5b50604051620032323803806200323283398181016040526060811015620000a057600080fd5b5080516020820151604090920151909190620000bc836200010c565b620000c782620001e3565b620000d28162000299565b604051806060016040528060408152602001620031f2604091398051620001029160369160209091019062000355565b50505050620003f1565b600054610100900460ff1680620001285750620001286200034f565b8062000137575060005460ff16155b620001745760405162461bcd60e51b815260040180806020018281038252602e815260200180620031c4602e913960400191505060405180910390fd5b600054610100900460ff16158015620001a0576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615620001cc57603380546001600160a01b0319166001600160a01b0384161790555b8015620001df576000805461ff00191690555b5050565b600054610100900460ff1680620001ff5750620001ff6200034f565b806200020e575060005460ff16155b6200024b5760405162461bcd60e51b815260040180806020018281038252602e815260200180620031c4602e913960400191505060405180910390fd5b600054610100900460ff1615801562000277576000805460ff1961ff0019909116610100171660011790555b8115620001cc5760348290558015620001df576000805461ff00191690555050565b600054610100900460ff1680620002b55750620002b56200034f565b80620002c4575060005460ff16155b620003015760405162461bcd60e51b815260040180806020018281038252602e815260200180620031c4602e913960400191505060405180910390fd5b600054610100900460ff161580156200032d576000805460ff1961ff0019909116610100171660011790555b8115620001cc5760358290558015620001df576000805461ff00191690555050565b303b1590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039857805160ff1916838001178555620003c8565b82800160010185558215620003c8579182015b82811115620003c8578251825591602001919060010190620003ab565b50620003d6929150620003da565b5090565b5b80821115620003d65760008155600101620003db565b612dc380620004016000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630cb2a6bd146100675780633acbe96e146101375780637d73b231146101b4578063877337b0146101d8578063c2c3d054146101f2578063e2b4ce9714610260575b600080fd5b6101356004803603606081101561007d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100a757600080fd5b8201836020820111156100b957600080fd5b803590602001918460018302840111600160201b831117156100da57600080fd5b919390929091602081019035600160201b8111156100f757600080fd5b82018360208201111561010957600080fd5b803590602001918460018302840111600160201b8311171561012a57600080fd5b509092509050610268565b005b61013f610441565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610179578181015183820152602001610161565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bc6104cf565b604080516001600160a01b039092168252519081900360200190f35b6101e06104de565b60408051918252519081900360200190f35b6101356004803603602081101561020857600080fd5b810190602081018135600160201b81111561022257600080fd5b82018360208201111561023457600080fd5b803590602001918460018302840111600160201b8311171561025557600080fd5b5090925090506104e4565b6101e06105b9565b600080610274876105bf565b965050509450505050816102cf576040805162461bcd60e51b815260206004820152601760248201527f746f6b656e206d75737420626520617661696c61626c65000000000000000000604482015290519081900360640190fd5b6000806103d188888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250506036805460408051602060026000196101006001871615020190941693909304601f810184900484028201840190925281815294509192508301828280156103c65780601f1061039b576101008083540402835291602001916103c6565b820191906000526020600020905b8154815290600101906020018083116103a957829003601f168201915b505050505086610748565b909250905081156104365760006104256104208a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6992505050565b610f02565b9050816104338b8383610f15565b50505b505050505050505050565b6036805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104c75780601f1061049c576101008083540402835291602001916104c7565b820191906000526020600020905b8154815290600101906020018083116104aa57829003601f168201915b505050505081565b6033546001600160a01b031690565b60355490565b6104ed33610f9b565b610537576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b61054360368383612c00565b507fc6b0860ba9f580e9c5b6ba4e0954fe82827096a99d92e8c2d73009539ea8d9fa33838360405180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b60345490565b60606000806000806000806105d5603554611026565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b15801561062157600080fd5b505afa158015610635573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561065e57600080fd5b8101908080516040519392919084600160201b82111561067d57600080fd5b90830190602082018581111561069257600080fd5b8251600160201b8111828201881017156106ab57600080fd5b82525081516020918201929091019080838360005b838110156106d85781810151838201526020016106c0565b50505050905090810190601f1680156107055780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b60008060a5855114610798576040805162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015290519081900360640190fd5b6041856001815181106107a757fe5b016020015160f81c14610801576040805162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015290519081900360640190fd5b60408051604180825260808201909252606091602082018180368337019050509050610831818760026041611147565b85516060908790604490811061084357fe5b0160200151875160f89190911c90610100908990604390811061086257fe5b016020015160f81c0201146108b7576040805162461bcd60e51b81526020600482015260166024820152750d2dcecc2d8d2c840d0cac2c8cae4e640d8cadccee8d60531b604482015290519081900360640190fd5b60408051606080825260808201909252816020820181803683370190505090506108e5818860456060611147565b6108f0818388611164565b610935576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b6040805160148082528183019092526060916020820181803683370190505090506109648183600b6014611147565b600080610971838961121d565b9092509050816109b7576040805162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746560a01b604482015290519081900360640190fd5b60408051602c80825260608281019093526020820181803683370190505090506109e581866034602c611147565b6109ee8161157b565b8051906020012060028d6040516020018082805190602001908083835b60208310610a2a5780518252601f199092019160209182019101610a0b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610a8d5780518252601f199092019160209182019101610a6e565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610acc573d6000803e3d6000fd5b5050506040513d6020811015610ae157600080fd5b505160408051602081810193909352815180820384018152908201909152805191012014610b56576040805162461bcd60e51b815260206004820152601860248201527f726573756c742068617368206e6f74206d61746368696e670000000000000000604482015290519081900360640190fd5b7f0902fdd015aa1e56f7e6026b69c0595e82155dcbd83a83a23b40f9fe96babbd98a8d604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610bba578181015183820152602001610ba2565b50505050905090810190601f168015610be75780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610c1a578181015183820152602001610c02565b50505050905090810190601f168015610c475780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15060019b909a5098505050505050505050565b60606000826040516020018082805190602001908083835b60208310610ca05780518252601f199092019160209182019101610c81565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052519050600881118015610ce85750601c8111155b610d2e576040805162461bcd60e51b81526020600482015260126024820152711b5a5cd99bdc9b585d1d1959081a5b9c1d5d60721b604482015290519081900360640190fd5b604080516007808252818301909252606091602082018180368337019050509050610dc381856040516020018082805190602001908083835b60208310610d865780518252601f199092019160209182019101610d67565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260006007611147565b805160208201207f7a2d79c44ec25893f1deb7192af566af2e14c179cce8e62e025bd750d6e078e214610e2f576040805162461bcd60e51b815260206004820152600f60248201526e0e0e4caccd2f040dad2e6dac2e8c6d608b1b604482015290519081900360640190fd5b610e37612c7e565b610e4085611bbf565b9050610e6e610e67604051806040016040528060018152602001601d60f91b815250611bbf565b8290611be4565b5080600001519250610ea2610e9b604051806040016040528060018152602001607d60f81b815250611bbf565b8290611bfe565b508051600019840114610eee576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a9cdbdb88199bdc9b585d608a1b604482015290519081900360640190fd5b610ef781611c5c565b93505050505b919050565b6000610f0f826012611cc3565b92915050565b610f20603554611026565b6001600160a01b031663d545782e8484846040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015610f7e57600080fd5b505af1158015610f92573d6000803e3d6000fd5b50505050505050565b6000610fa8603454611026565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ff457600080fd5b505afa158015611008573d6000803e3d6000fd5b505050506040513d602081101561101e57600080fd5b505192915050565b6033546000906001600160a01b0316611086576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156110d257600080fd5b505afa1580156110e6573d6000803e3d6000fd5b505050506040513d60208110156110fc57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015610ff457600080fd5b6020848101908484010161115c828285612538565b505050505050565b60008060006002866040518082805190602001908083835b6020831061119b5780518252601f19909201916020918201910161117c565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156111da573d6000803e3d6000fd5b5050506040513d60208110156111ef57600080fd5b505190506111fd8186612576565b845160208601206001600160a01b03918216911614925050509392505050565b600080836040516020018082805190602001908083835b602083106112535780518252601f199092019160209182019101611234565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040525160141461129157fe5b611299612c7e565b6112a285611bbf565b90506112ac612c7e565b6112ce604051806040016040528060018152602001601d60f91b815250611bbf565b90506112d8612c7e565b6112fa604051806040016040528060018152602001600160fd1b815250611bbf565b9050600061131861131361130e8685611be4565b611c5c565b6126ff565b905060008111801561132a5750602081105b611367576040805162461bcd60e51b81526020600482015260096024820152683230bc9032b93937b960b91b604482015290519081900360640190fd5b600061137e61137961130e8786611be4565b61270c565b60ff1690506000811180156113935750600d81105b6113d2576040805162461bcd60e51b815260206004820152600b60248201526a36b7b73a341032b93937b960a91b604482015290519081900360640190fd5b60006113e461131361130e8887611be4565b90506107e1811180156113f85750610bb881105b611436576040805162461bcd60e51b815260206004820152600a6024820152693cb2b0b91032b93937b960b11b604482015290519081900360640190fd5b600061144861131361130e8989611be4565b90506019811061148c576040805162461bcd60e51b815260206004820152600a6024820152693437bab91032b93937b960b11b604482015290519081900360640190fd5b600061149e61131361130e8a8a611be4565b9050603c81106114e4576040805162461bcd60e51b815260206004820152600c60248201526b36b4b73aba329032b93937b960a11b604482015290519081900360640190fd5b60006114f661131361130e8b8b611be4565b9050603c811061153c576040805162461bcd60e51b815260206004820152600c60248201526b39b2b1b7b7321032b93937b960a11b604482015290519081900360640190fd5b6402540be4009093026305f5e10090940293909301620f4240909402939093016127109093029290920160649091020101958611979596505050505050565b606060008060008060008651905060608167ffffffffffffffff811180156115a257600080fd5b506040519080825280601f01601f1916602001820160405280156115cd576020820181803683370190505b509050600080831180156115e2575060048306155b611633576040805162461bcd60e51b815260206004820152601760248201527f696e76616c69642062617365363420656e636f64696e67000000000000000000604482015290519081900360640190fd5b7ff30c17f6c257181e11b9ea19fc7d498b2880fcad645a66e130edeab084271f1689600285038151811061166357fe5b01602090810151604080516001600160f81b0319909216828401528051808303600101815260219092019052805191012014156116a557600283039250611713565b7ff30c17f6c257181e11b9ea19fc7d498b2880fcad645a66e130edeab084271f168960018503815181106116d557fe5b01602090810151604080516001600160f81b031990921682840152805180830360010181526021909201905280519101201415611713576001830392505b600319831660005b81811015611931576040518060a00160405280607b8152602001612cf2607b91398b5160018301928d91811061174d57fe5b0160200151815160f89190911c90811061176357fe5b602001015160f81c60f81b98506040518060a00160405280607b8152602001612cf2607b91398b5160018301928d91811061179a57fe5b0160200151815160f89190911c9081106117b057fe5b602001015160f81c60f81b97506040518060a00160405280607b8152602001612cf2607b91398b5160018301928d9181106117e757fe5b0160200151815160f89190911c9081106117fd57fe5b602001015160f81c60f81b96506040518060a00160405280607b8152602001612cf2607b91398b5160018301928d91811061183457fe5b0160200151815160f89190911c90811061184a57fe5b016020015184516001600160f81b031991821697506001850194603f60fa1b60028d901b1660ff60f41b60048d901c1617909216918691811061188957fe5b60200101906001600160f81b031916908160001a90535083516001840193600f60fc1b60048b901b1660ff60f61b60028b901c16176001600160f81b0319169186919081106118d457fe5b60200101906001600160f81b031916908160001a90535083516001840193600360fe1b60068a901b1688176001600160f81b03191691869190811061191557fe5b60200101906001600160f81b031916908160001a90535061171b565b81850360021415611a29576040518060a00160405280607b8152602001612cf2607b91398b5160018301928d91811061196657fe5b0160200151815160f89190911c90811061197c57fe5b602001015160f81c60f81b98506040518060a00160405280607b8152602001612cf2607b91398b5160018301928d9181106119b357fe5b0160200151815160f89190911c9081106119c957fe5b602001015160f81c60f81b97506004886001600160f81b031916901c60028a6001600160f81b031916901b1760ff60f81b16848480600101955081518110611a0d57fe5b60200101906001600160f81b031916908160001a905350611bb0565b81850360031415611bb0576040518060a00160405280607b8152602001612cf2607b91398b5160018301928d918110611a5e57fe5b0160200151815160f89190911c908110611a7457fe5b602001015160f81c60f81b98506040518060a00160405280607b8152602001612cf2607b91398b5160018301928d918110611aab57fe5b0160200151815160f89190911c908110611ac157fe5b602001015160f81c60f81b97506040518060a00160405280607b8152602001612cf2607b91398b5160018301928d918110611af857fe5b0160200151815160f89190911c908110611b0e57fe5b016020015184516001600160f81b031991821698506001850194603f60fa1b60028d901b1660ff60f41b60048d901c16179092169186918110611b4d57fe5b60200101906001600160f81b031916908160001a90535083516001840193600f60fc1b60048b901b1660ff60f61b60028b901c16176001600160f81b031916918691908110611b9857fe5b60200101906001600160f81b031916908160001a9053505b50508152979650505050505050565b611bc7612c7e565b506040805180820190915281518152602082810190820152919050565b611bec612c7e565b611bf7838383612a18565b5092915050565b611c06612c7e565b815183511015611c17575081610f0f565b8151835160208086015190850151910191909103906001908214611c45575082516020840151819020908220145b8015611c5357835185510385525b50929392505050565b606080826000015167ffffffffffffffff81118015611c7a57600080fd5b506040519080825280601f01601f191660200182016040528015611ca5576020820181803683370190505b5090506000602082019050611bf78185602001518660000151612538565b60008281808080808080808080805b8b518110156122e1578b51600360fc1b908d9083908110611cef57fe5b01602001516001600160f81b03191610801590611d2d57508b51603960f81b908d9083908110611d1b57fe5b01602001516001600160f81b03191611155b8015611d37575083155b15611dcf578415611d8957611d4d8a600a612a89565b9950611d7c603060f81b60f81c8d8381518110611d6657fe5b01602001518c9160f89190911c0360ff16612ae9565b9950600190970196611dca565b60019550611d988b600a612a89565b9a50611dc7603060f81b60f81c8d8381518110611db157fe5b01602001518d9160f89190911c0360ff16612ae9565b9a505b6122d9565b8b51600360fc1b908d9083908110611de357fe5b01602001516001600160f81b03191610801590611e2157508b51603960f81b908d9083908110611e0f57fe5b01602001516001600160f81b03191611155b8015611e2a5750835b15611e7057611e3a89600a612a89565b9850611e69603060f81b60f81c8d8381518110611e5357fe5b01602001518b9160f89190911c0360ff16612ae9565b98506122d9565b8b51601760f91b908d9083908110611e8457fe5b01602001516001600160f81b0319161415611f8b5785611ee3576040805162461bcd60e51b81526020600482015260156024820152741b5a5cdcda5b99c81a5b9d1959dc985b081c185c9d605a1b604482015290519081900360640190fd5b8415611f36576040805162461bcd60e51b815260206004820152601760248201527f6475706c696361746520646563696d616c20706f696e74000000000000000000604482015290519081900360640190fd5b8315611f82576040805162461bcd60e51b8152602060048201526016602482015275191958da5b585b0818599d195c88195e1c1bdb995b9d60521b604482015290519081900360640190fd5b600194506122d9565b8b51602d60f81b908d9083908110611f9f57fe5b01602001516001600160f81b0319161415612095578215611ff5576040805162461bcd60e51b815260206004820152600b60248201526a6475706c6963617465202d60a81b604482015290519081900360640190fd5b8115612035576040805162461bcd60e51b815260206004820152600a60248201526932bc3a39309039b4b3b760b11b604482015290519081900360640190fd5b80876001011461208c576040805162461bcd60e51b815260206004820152601e60248201527f2d207369676e206e6f7420696d6d6564696174656c7920616674657220650000604482015290519081900360640190fd5b600192506122d9565b8b51602b60f81b908d90839081106120a957fe5b01602001516001600160f81b031916141561219f5781156120ff576040805162461bcd60e51b815260206004820152600b60248201526a6475706c6963617465202b60a81b604482015290519081900360640190fd5b821561213f576040805162461bcd60e51b815260206004820152600a60248201526932bc3a39309039b4b3b760b11b604482015290519081900360640190fd5b808760010114612196576040805162461bcd60e51b815260206004820152601e60248201527f2b207369676e206e6f7420696d6d6564696174656c7920616674657220650000604482015290519081900360640190fd5b600191506122d9565b8b51604560f81b908d90839081106121b357fe5b01602001516001600160f81b03191614806121ee57508b51606560f81b908d90839081106121dd57fe5b01602001516001600160f81b031916145b1561229c578561223d576040805162461bcd60e51b81526020600482015260156024820152741b5a5cdcda5b99c81a5b9d1959dc985b081c185c9d605a1b604482015290519081900360640190fd5b8315612290576040805162461bcd60e51b815260206004820152601960248201527f6475706c6963617465206578706f6e656e742073796d626f6c00000000000000604482015290519081900360640190fd5b600193508096506122d9565b6040805162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a5908191a59da5d609a1b604482015290519081900360640190fd5b600101611cd2565b82806122ea5750815b15612303578660020181116122fe57600080fd5b612318565b83156123185786600101811161231857600080fd5b8215612399578d891061238f57604e8e8a031061236c576040805162461bcd60e51b815260206004820152600d60248201526c6578706f6e656e74203e20373760981b604482015290519081900360640190fd5b8d8903600a0a8b8161237a57fe5b049c50610f0f9b505050505050505050505050565b888e039d506123a6565b6123a38e8a612ae9565b9d505b878e1061246e57604e88106123ec5760405162461bcd60e51b8152600401808060200182810382526022815260200180612cae6022913960400191505060405180910390fd5b6123fa8b600a8a900a612a89565b9a506124068b8b612ae9565b9a50604e888f031061244f576040805162461bcd60e51b815260206004820152600d60248201526c6578706f6e656e74203e20373760981b604482015290519081900360640190fd5b612467888f03600a0a8c612a8990919063ffffffff16565b9a50612525565b8d88039750604e88106124b25760405162461bcd60e51b8152600401808060200182810382526022815260200180612cae6022913960400191505060405180910390fd5b87600a0a8a816124be57fe5b049950604e8e106125005760405162461bcd60e51b8152600401808060200182810382526022815260200180612cae6022913960400191505060405180910390fd5b6125168e600a0a8c612a8990919063ffffffff16565b9a506125228b8b612ae9565b9a505b50989d9c50505050505050505050505050565b5b60208110612558578151835260209283019290910190601f1901612539565b905182516020929092036101000a6000190180199091169116179052565b600081516041146125ce576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a601b81148015906125f557508060ff16601c14155b156126315760405162461bcd60e51b8152600401808060200182810382526022815260200180612cd06022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561268d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126f5576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b6000610f0f826000611cc3565b600080826040516020018082805190602001908083835b602083106127425780518252601f199092019160209182019101612723565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d98114156127b1576001915050610efd565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a8114156127e3576002915050610efd565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec3811415612815576003915050610efd565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac188811415612847576004915050610efd565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d3811415612879576005915050610efd565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d8114156128ab576006915050610efd565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c8114156128dd576007915050610efd565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6481141561290f576008915050610efd565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac811415612941576009915050610efd565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516481141561297357600a915050610efd565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf48114156129a557600b915050610efd565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc8114156129d757600c915050610efd565b6040805162461bcd60e51b81526020600482015260116024820152700dcdee840c240ecc2d8d2c840dadedce8d607b1b604482015290519081900360640190fd5b612a20612c7e565b6000612a3e8560000151866020015186600001518760200151612b43565b60208087018051918601919091528051820385528651905191925001811415612a6a5760008552612a80565b8351835186519101900385528351810160208601525b50909392505050565b600082612a9857506000610f0f565b82820282848281612aa557fe5b0414612ae25760405162461bcd60e51b8152600401808060200182810382526021815260200180612d6d6021913960400191505060405180910390fd5b9392505050565b600082820183811015612ae2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008381868511612bf15760208511612bb65783518251600019600860208990030260020a011991821690888a018890039083165b828114612ba857818610612b96578a8a019650505050505050612bf8565b50600190940180519094908316612b78565b859650505050505050612bf8565b508383206000905b8588038211612bef5785832081811415612bde5783945050505050612bf8565b506001928301929190910190612bbe565b505b5050508284015b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c415782800160ff19823516178555612c6e565b82800160010185558215612c6e579182015b82811115612c6e578235825591602001919060010190612c53565b50612c7a929150612c98565b5090565b604051806040016040528060008152602001600081525090565b5b80821115612c7a5760008155600101612c9956fe6d6f7265207468616e20373720646563696d616c206469676974732070617273656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e003e003f3435363738393a3b3c3d00000000000000000102030405060708090a0b0c0d0e0f10111213141516171819000000003f001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f4380a803e9bb4cc9a2a8184523586258a62ef2b02a1ad5c78374223ea81688464736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a0f4f688350018ad1b9785991c0bde5f704b005dc79972b114dbed4a615a983710bfc647ebe5a320daa28771dce6a2d104f5efa2e4a85ba3760b76d46f8571ca" +var OracleBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966035553480156200007a57600080fd5b506040516200322f3803806200322f83398181016040526060811015620000a057600080fd5b5080516020820151604090920151909190620000bc836200010c565b620000c782620001e3565b620000d28162000299565b604051806060016040528060408152602001620031ef604091398051620001029160369160209091019062000355565b50505050620003f1565b600054610100900460ff1680620001285750620001286200034f565b8062000137575060005460ff16155b620001745760405162461bcd60e51b815260040180806020018281038252602e815260200180620031c1602e913960400191505060405180910390fd5b600054610100900460ff16158015620001a0576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615620001cc57603380546001600160a01b0319166001600160a01b0384161790555b8015620001df576000805461ff00191690555b5050565b600054610100900460ff1680620001ff5750620001ff6200034f565b806200020e575060005460ff16155b6200024b5760405162461bcd60e51b815260040180806020018281038252602e815260200180620031c1602e913960400191505060405180910390fd5b600054610100900460ff1615801562000277576000805460ff1961ff0019909116610100171660011790555b8115620001cc5760348290558015620001df576000805461ff00191690555050565b600054610100900460ff1680620002b55750620002b56200034f565b80620002c4575060005460ff16155b620003015760405162461bcd60e51b815260040180806020018281038252602e815260200180620031c1602e913960400191505060405180910390fd5b600054610100900460ff161580156200032d576000805460ff1961ff0019909116610100171660011790555b8115620001cc5760358290558015620001df576000805461ff00191690555050565b303b1590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039857805160ff1916838001178555620003c8565b82800160010185558215620003c8579182015b82811115620003c8578251825591602001919060010190620003ab565b50620003d6929150620003da565b5090565b5b80821115620003d65760008155600101620003db565b612dc080620004016000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630cb2a6bd146100675780633acbe96e146101375780637d73b231146101b4578063877337b0146101d8578063c2c3d054146101f2578063e2b4ce9714610260575b600080fd5b6101356004803603606081101561007d57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156100a757600080fd5b8201836020820111156100b957600080fd5b803590602001918460018302840111600160201b831117156100da57600080fd5b919390929091602081019035600160201b8111156100f757600080fd5b82018360208201111561010957600080fd5b803590602001918460018302840111600160201b8311171561012a57600080fd5b509092509050610268565b005b61013f610441565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610179578181015183820152602001610161565b50505050905090810190601f1680156101a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bc6104cf565b604080516001600160a01b039092168252519081900360200190f35b6101e06104de565b60408051918252519081900360200190f35b6101356004803603602081101561020857600080fd5b810190602081018135600160201b81111561022257600080fd5b82018360208201111561023457600080fd5b803590602001918460018302840111600160201b8311171561025557600080fd5b5090925090506104e4565b6101e06105b6565b600080610274876105bc565b965050509450505050816102cf576040805162461bcd60e51b815260206004820152601760248201527f746f6b656e206d75737420626520617661696c61626c65000000000000000000604482015290519081900360640190fd5b6000806103d188888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250506036805460408051602060026000196101006001871615020190941693909304601f810184900484028201840190925281815294509192508301828280156103c65780601f1061039b576101008083540402835291602001916103c6565b820191906000526020600020905b8154815290600101906020018083116103a957829003601f168201915b505050505086610745565b909250905081156104365760006104256104208a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c6692505050565b610eff565b9050816104338b8383610f12565b50505b505050505050505050565b6036805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104c75780601f1061049c576101008083540402835291602001916104c7565b820191906000526020600020905b8154815290600101906020018083116104aa57829003601f168201915b505050505081565b6033546001600160a01b031690565b60355490565b6104ed33610f98565b610534576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b61054060368383612bfd565b507fc6b0860ba9f580e9c5b6ba4e0954fe82827096a99d92e8c2d73009539ea8d9fa33838360405180846001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b60345490565b60606000806000806000806105d2603554611023565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b15801561061e57600080fd5b505afa158015610632573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561065b57600080fd5b8101908080516040519392919084600160201b82111561067a57600080fd5b90830190602082018581111561068f57600080fd5b8251600160201b8111828201881017156106a857600080fd5b82525081516020918201929091019080838360005b838110156106d55781810151838201526020016106bd565b50505050905090810190601f1680156107025780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b60008060a5855114610795576040805162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015290519081900360640190fd5b6041856001815181106107a457fe5b016020015160f81c146107fe576040805162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e6774680000000000000000604482015290519081900360640190fd5b6040805160418082526080820190925260609160208201818036833701905050905061082e818760026041611144565b85516060908790604490811061084057fe5b0160200151875160f89190911c90610100908990604390811061085f57fe5b016020015160f81c0201146108b4576040805162461bcd60e51b81526020600482015260166024820152750d2dcecc2d8d2c840d0cac2c8cae4e640d8cadccee8d60531b604482015290519081900360640190fd5b60408051606080825260808201909252816020820181803683370190505090506108e2818860456060611144565b6108ed818388611161565b610932576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b6040805160148082528183019092526060916020820181803683370190505090506109618183600b6014611144565b60008061096e838961121a565b9092509050816109b4576040805162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746560a01b604482015290519081900360640190fd5b60408051602c80825260608281019093526020820181803683370190505090506109e281866034602c611144565b6109eb81611578565b8051906020012060028d6040516020018082805190602001908083835b60208310610a275780518252601f199092019160209182019101610a08565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610a8a5780518252601f199092019160209182019101610a6b565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610ac9573d6000803e3d6000fd5b5050506040513d6020811015610ade57600080fd5b505160408051602081810193909352815180820384018152908201909152805191012014610b53576040805162461bcd60e51b815260206004820152601860248201527f726573756c742068617368206e6f74206d61746368696e670000000000000000604482015290519081900360640190fd5b7f0902fdd015aa1e56f7e6026b69c0595e82155dcbd83a83a23b40f9fe96babbd98a8d604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610bb7578181015183820152602001610b9f565b50505050905090810190601f168015610be45780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610c17578181015183820152602001610bff565b50505050905090810190601f168015610c445780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15060019b909a5098505050505050505050565b60606000826040516020018082805190602001908083835b60208310610c9d5780518252601f199092019160209182019101610c7e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052519050600881118015610ce55750601c8111155b610d2b576040805162461bcd60e51b81526020600482015260126024820152711b5a5cd99bdc9b585d1d1959081a5b9c1d5d60721b604482015290519081900360640190fd5b604080516007808252818301909252606091602082018180368337019050509050610dc081856040516020018082805190602001908083835b60208310610d835780518252601f199092019160209182019101610d64565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260006007611144565b805160208201207f7a2d79c44ec25893f1deb7192af566af2e14c179cce8e62e025bd750d6e078e214610e2c576040805162461bcd60e51b815260206004820152600f60248201526e0e0e4caccd2f040dad2e6dac2e8c6d608b1b604482015290519081900360640190fd5b610e34612c7b565b610e3d85611bbc565b9050610e6b610e64604051806040016040528060018152602001601d60f91b815250611bbc565b8290611be1565b5080600001519250610e9f610e98604051806040016040528060018152602001607d60f81b815250611bbc565b8290611bfb565b508051600019840114610eeb576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a9cdbdb88199bdc9b585d608a1b604482015290519081900360640190fd5b610ef481611c59565b93505050505b919050565b6000610f0c826012611cc0565b92915050565b610f1d603554611023565b6001600160a01b031663d545782e8484846040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015610f7b57600080fd5b505af1158015610f8f573d6000803e3d6000fd5b50505050505050565b6000610fa5603454611023565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d602081101561101b57600080fd5b505192915050565b6033546000906001600160a01b0316611083576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156110cf57600080fd5b505afa1580156110e3573d6000803e3d6000fd5b505050506040513d60208110156110f957600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015610ff157600080fd5b60208481019084840101611159828285612535565b505050505050565b60008060006002866040518082805190602001908083835b602083106111985780518252601f199092019160209182019101611179565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156111d7573d6000803e3d6000fd5b5050506040513d60208110156111ec57600080fd5b505190506111fa8186612573565b845160208601206001600160a01b03918216911614925050509392505050565b600080836040516020018082805190602001908083835b602083106112505780518252601f199092019160209182019101611231565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040525160141461128e57fe5b611296612c7b565b61129f85611bbc565b90506112a9612c7b565b6112cb604051806040016040528060018152602001601d60f91b815250611bbc565b90506112d5612c7b565b6112f7604051806040016040528060018152602001600160fd1b815250611bbc565b9050600061131561131061130b8685611be1565b611c59565b6126fc565b90506000811180156113275750602081105b611364576040805162461bcd60e51b81526020600482015260096024820152683230bc9032b93937b960b91b604482015290519081900360640190fd5b600061137b61137661130b8786611be1565b612709565b60ff1690506000811180156113905750600d81105b6113cf576040805162461bcd60e51b815260206004820152600b60248201526a36b7b73a341032b93937b960a91b604482015290519081900360640190fd5b60006113e161131061130b8887611be1565b90506107e1811180156113f55750610bb881105b611433576040805162461bcd60e51b815260206004820152600a6024820152693cb2b0b91032b93937b960b11b604482015290519081900360640190fd5b600061144561131061130b8989611be1565b905060198110611489576040805162461bcd60e51b815260206004820152600a6024820152693437bab91032b93937b960b11b604482015290519081900360640190fd5b600061149b61131061130b8a8a611be1565b9050603c81106114e1576040805162461bcd60e51b815260206004820152600c60248201526b36b4b73aba329032b93937b960a11b604482015290519081900360640190fd5b60006114f361131061130b8b8b611be1565b9050603c8110611539576040805162461bcd60e51b815260206004820152600c60248201526b39b2b1b7b7321032b93937b960a11b604482015290519081900360640190fd5b6402540be4009093026305f5e10090940293909301620f4240909402939093016127109093029290920160649091020101958611979596505050505050565b606060008060008060008651905060608167ffffffffffffffff8111801561159f57600080fd5b506040519080825280601f01601f1916602001820160405280156115ca576020820181803683370190505b509050600080831180156115df575060048306155b611630576040805162461bcd60e51b815260206004820152601760248201527f696e76616c69642062617365363420656e636f64696e67000000000000000000604482015290519081900360640190fd5b7ff30c17f6c257181e11b9ea19fc7d498b2880fcad645a66e130edeab084271f1689600285038151811061166057fe5b01602090810151604080516001600160f81b0319909216828401528051808303600101815260219092019052805191012014156116a257600283039250611710565b7ff30c17f6c257181e11b9ea19fc7d498b2880fcad645a66e130edeab084271f168960018503815181106116d257fe5b01602090810151604080516001600160f81b031990921682840152805180830360010181526021909201905280519101201415611710576001830392505b600319831660005b8181101561192e576040518060a00160405280607b8152602001612cef607b91398b5160018301928d91811061174a57fe5b0160200151815160f89190911c90811061176057fe5b602001015160f81c60f81b98506040518060a00160405280607b8152602001612cef607b91398b5160018301928d91811061179757fe5b0160200151815160f89190911c9081106117ad57fe5b602001015160f81c60f81b97506040518060a00160405280607b8152602001612cef607b91398b5160018301928d9181106117e457fe5b0160200151815160f89190911c9081106117fa57fe5b602001015160f81c60f81b96506040518060a00160405280607b8152602001612cef607b91398b5160018301928d91811061183157fe5b0160200151815160f89190911c90811061184757fe5b016020015184516001600160f81b031991821697506001850194603f60fa1b60028d901b1660ff60f41b60048d901c1617909216918691811061188657fe5b60200101906001600160f81b031916908160001a90535083516001840193600f60fc1b60048b901b1660ff60f61b60028b901c16176001600160f81b0319169186919081106118d157fe5b60200101906001600160f81b031916908160001a90535083516001840193600360fe1b60068a901b1688176001600160f81b03191691869190811061191257fe5b60200101906001600160f81b031916908160001a905350611718565b81850360021415611a26576040518060a00160405280607b8152602001612cef607b91398b5160018301928d91811061196357fe5b0160200151815160f89190911c90811061197957fe5b602001015160f81c60f81b98506040518060a00160405280607b8152602001612cef607b91398b5160018301928d9181106119b057fe5b0160200151815160f89190911c9081106119c657fe5b602001015160f81c60f81b97506004886001600160f81b031916901c60028a6001600160f81b031916901b1760ff60f81b16848480600101955081518110611a0a57fe5b60200101906001600160f81b031916908160001a905350611bad565b81850360031415611bad576040518060a00160405280607b8152602001612cef607b91398b5160018301928d918110611a5b57fe5b0160200151815160f89190911c908110611a7157fe5b602001015160f81c60f81b98506040518060a00160405280607b8152602001612cef607b91398b5160018301928d918110611aa857fe5b0160200151815160f89190911c908110611abe57fe5b602001015160f81c60f81b97506040518060a00160405280607b8152602001612cef607b91398b5160018301928d918110611af557fe5b0160200151815160f89190911c908110611b0b57fe5b016020015184516001600160f81b031991821698506001850194603f60fa1b60028d901b1660ff60f41b60048d901c16179092169186918110611b4a57fe5b60200101906001600160f81b031916908160001a90535083516001840193600f60fc1b60048b901b1660ff60f61b60028b901c16176001600160f81b031916918691908110611b9557fe5b60200101906001600160f81b031916908160001a9053505b50508152979650505050505050565b611bc4612c7b565b506040805180820190915281518152602082810190820152919050565b611be9612c7b565b611bf4838383612a15565b5092915050565b611c03612c7b565b815183511015611c14575081610f0c565b8151835160208086015190850151910191909103906001908214611c42575082516020840151819020908220145b8015611c5057835185510385525b50929392505050565b606080826000015167ffffffffffffffff81118015611c7757600080fd5b506040519080825280601f01601f191660200182016040528015611ca2576020820181803683370190505b5090506000602082019050611bf48185602001518660000151612535565b60008281808080808080808080805b8b518110156122de578b51600360fc1b908d9083908110611cec57fe5b01602001516001600160f81b03191610801590611d2a57508b51603960f81b908d9083908110611d1857fe5b01602001516001600160f81b03191611155b8015611d34575083155b15611dcc578415611d8657611d4a8a600a612a86565b9950611d79603060f81b60f81c8d8381518110611d6357fe5b01602001518c9160f89190911c0360ff16612ae6565b9950600190970196611dc7565b60019550611d958b600a612a86565b9a50611dc4603060f81b60f81c8d8381518110611dae57fe5b01602001518d9160f89190911c0360ff16612ae6565b9a505b6122d6565b8b51600360fc1b908d9083908110611de057fe5b01602001516001600160f81b03191610801590611e1e57508b51603960f81b908d9083908110611e0c57fe5b01602001516001600160f81b03191611155b8015611e275750835b15611e6d57611e3789600a612a86565b9850611e66603060f81b60f81c8d8381518110611e5057fe5b01602001518b9160f89190911c0360ff16612ae6565b98506122d6565b8b51601760f91b908d9083908110611e8157fe5b01602001516001600160f81b0319161415611f885785611ee0576040805162461bcd60e51b81526020600482015260156024820152741b5a5cdcda5b99c81a5b9d1959dc985b081c185c9d605a1b604482015290519081900360640190fd5b8415611f33576040805162461bcd60e51b815260206004820152601760248201527f6475706c696361746520646563696d616c20706f696e74000000000000000000604482015290519081900360640190fd5b8315611f7f576040805162461bcd60e51b8152602060048201526016602482015275191958da5b585b0818599d195c88195e1c1bdb995b9d60521b604482015290519081900360640190fd5b600194506122d6565b8b51602d60f81b908d9083908110611f9c57fe5b01602001516001600160f81b0319161415612092578215611ff2576040805162461bcd60e51b815260206004820152600b60248201526a6475706c6963617465202d60a81b604482015290519081900360640190fd5b8115612032576040805162461bcd60e51b815260206004820152600a60248201526932bc3a39309039b4b3b760b11b604482015290519081900360640190fd5b808760010114612089576040805162461bcd60e51b815260206004820152601e60248201527f2d207369676e206e6f7420696d6d6564696174656c7920616674657220650000604482015290519081900360640190fd5b600192506122d6565b8b51602b60f81b908d90839081106120a657fe5b01602001516001600160f81b031916141561219c5781156120fc576040805162461bcd60e51b815260206004820152600b60248201526a6475706c6963617465202b60a81b604482015290519081900360640190fd5b821561213c576040805162461bcd60e51b815260206004820152600a60248201526932bc3a39309039b4b3b760b11b604482015290519081900360640190fd5b808760010114612193576040805162461bcd60e51b815260206004820152601e60248201527f2b207369676e206e6f7420696d6d6564696174656c7920616674657220650000604482015290519081900360640190fd5b600191506122d6565b8b51604560f81b908d90839081106121b057fe5b01602001516001600160f81b03191614806121eb57508b51606560f81b908d90839081106121da57fe5b01602001516001600160f81b031916145b15612299578561223a576040805162461bcd60e51b81526020600482015260156024820152741b5a5cdcda5b99c81a5b9d1959dc985b081c185c9d605a1b604482015290519081900360640190fd5b831561228d576040805162461bcd60e51b815260206004820152601960248201527f6475706c6963617465206578706f6e656e742073796d626f6c00000000000000604482015290519081900360640190fd5b600193508096506122d6565b6040805162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a5908191a59da5d609a1b604482015290519081900360640190fd5b600101611ccf565b82806122e75750815b15612300578660020181116122fb57600080fd5b612315565b83156123155786600101811161231557600080fd5b8215612396578d891061238c57604e8e8a0310612369576040805162461bcd60e51b815260206004820152600d60248201526c6578706f6e656e74203e20373760981b604482015290519081900360640190fd5b8d8903600a0a8b8161237757fe5b049c50610f0c9b505050505050505050505050565b888e039d506123a3565b6123a08e8a612ae6565b9d505b878e1061246b57604e88106123e95760405162461bcd60e51b8152600401808060200182810382526022815260200180612cab6022913960400191505060405180910390fd5b6123f78b600a8a900a612a86565b9a506124038b8b612ae6565b9a50604e888f031061244c576040805162461bcd60e51b815260206004820152600d60248201526c6578706f6e656e74203e20373760981b604482015290519081900360640190fd5b612464888f03600a0a8c612a8690919063ffffffff16565b9a50612522565b8d88039750604e88106124af5760405162461bcd60e51b8152600401808060200182810382526022815260200180612cab6022913960400191505060405180910390fd5b87600a0a8a816124bb57fe5b049950604e8e106124fd5760405162461bcd60e51b8152600401808060200182810382526022815260200180612cab6022913960400191505060405180910390fd5b6125138e600a0a8c612a8690919063ffffffff16565b9a5061251f8b8b612ae6565b9a505b50989d9c50505050505050505050505050565b5b60208110612555578151835260209283019290910190601f1901612536565b905182516020929092036101000a6000190180199091169116179052565b600081516041146125cb576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a601b81148015906125f257508060ff16601c14155b1561262e5760405162461bcd60e51b8152600401808060200182810382526022815260200180612ccd6022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561268a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126f2576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b6000610f0c826000611cc0565b600080826040516020018082805190602001908083835b6020831061273f5780518252601f199092019160209182019101612720565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f4a18c9083b936e0757952a5d9d34b5575d427661506fbe9908c2a1da3f3e80d98114156127ae576001915050610efa565b7f78ec83563b948f0ac242d7eaefd592adf65964e11cc27f11ae41faa99a1e990a8114156127e0576002915050610efa565b7f2bab7d3f253ae0e3722abcc2571faced288946968116996ffc3de31fb7348ec3811415612812576003915050610efa565b7fc6f33aba2381b69f05afc78835e501547a9daffa08d674623068c378423ac188811415612844576004915050610efa565b7fdb5ee1006003349b29eda5be5fe34f728659f836a948d4ec595114aebbb159d3811415612876576005915050610efa565b7f44a0046ab54c1458fc3c39dfcadc52509ad809730ec301470d2d747dbe77242d8114156128a8576006915050610efa565b7f74d9e46f10329e61dc333ff1800274be516163110de31961b4e0c61de3e90c5c8114156128da576007915050610efa565b7fed40c08ab6f3d9c5d71155e25b1271d5b9eca8c27bf89e1d2293fcb77c5abf6481141561290c576008915050610efa565b7f7d801199c77197eb9933a633741db90c2c6f3d7d14aca35f5f80a41b4a8863ac81141561293e576009915050610efa565b7fb7841ed82fc96483f061ddc0b19846855df22558c4aea3b3b058ce0d9f1f516481141561297057600a915050610efa565b7f487851233e540dddea8f904d6802590aead5463b1c44965d68348bb7def25cf48114156129a257600b915050610efa565b7f3bd971d8758c58fe0c4d635451404450c5edda87d624a89819e0be5a122933dc8114156129d457600c915050610efa565b6040805162461bcd60e51b81526020600482015260116024820152700dcdee840c240ecc2d8d2c840dadedce8d607b1b604482015290519081900360640190fd5b612a1d612c7b565b6000612a3b8560000151866020015186600001518760200151612b40565b60208087018051918601919091528051820385528651905191925001811415612a675760008552612a7d565b8351835186519101900385528351810160208601525b50909392505050565b600082612a9557506000610f0c565b82820282848281612aa257fe5b0414612adf5760405162461bcd60e51b8152600401808060200182810382526021815260200180612d6a6021913960400191505060405180910390fd5b9392505050565b600082820183811015612adf576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008381868511612bee5760208511612bb35783518251600019600860208990030260020a011991821690888a018890039083165b828114612ba557818610612b93578a8a019650505050505050612bf5565b50600190940180519094908316612b75565b859650505050505050612bf5565b508383206000905b8588038211612bec5785832081811415612bdb5783945050505050612bf5565b506001928301929190910190612bbb565b505b5050508284015b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c3e5782800160ff19823516178555612c6b565b82800160010185558215612c6b579182015b82811115612c6b578235825591602001919060010190612c50565b50612c77929150612c95565b5090565b604051806040016040528060008152602001600081525090565b5b80821115612c775760008155600101612c9656fe6d6f7265207468616e20373720646563696d616c206469676974732070617273656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e003e003f3435363738393a3b3c3d00000000000000000102030405060708090a0b0c0d0e0f10111213141516171819000000003f001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212204447c158db41e83881e9b70c32e90caba67d982bb71908a77f1b3fa590f23a9564736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a0f4f688350018ad1b9785991c0bde5f704b005dc79972b114dbed4a615a983710bfc647ebe5a320daa28771dce6a2d104f5efa2e4a85ba3760b76d46f8571ca" // DeployOracle deploys a new Ethereum contract, binding an instance of Oracle to it. func DeployOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _ens_ common.Address, _controllerNode_ [32]byte, _tokenWhitelistNode_ [32]byte) (common.Address, *types.Transaction, *Oracle, error) { diff --git a/pkg/bindings/tokenWhitelist.go b/pkg/bindings/tokenWhitelist.go index da41ef97..9b82fbd4 100644 --- a/pkg/bindings/tokenWhitelist.go +++ b/pkg/bindings/tokenWhitelist.go @@ -31,7 +31,7 @@ var ( const TokenWhitelistABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_oracleNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_stablecoinAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"_methodId\",\"type\":\"bytes4\"}],\"name\":\"AddedExclusiveMethod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"_methodId\",\"type\":\"bytes4\"}],\"name\":\"AddedMethodId\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_magnitude\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_loadable\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_redeemable\",\"type\":\"bool\"}],\"name\":\"AddedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"_methodId\",\"type\":\"bytes4\"}],\"name\":\"RemovedExclusiveMethod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"_methodId\",\"type\":\"bytes4\"}],\"name\":\"RemovedMethodId\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"RemovedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_loadable\",\"type\":\"bool\"}],\"name\":\"UpdatedTokenLoadable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"UpdatedTokenRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_redeemable\",\"type\":\"bool\"}],\"name\":\"UpdatedTokenRedeemable\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"_symbols\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_magnitude\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"_loadable\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"_redeemable\",\"type\":\"bool[]\"},{\"internalType\":\"uint256\",\"name\":\"_lastUpdate\",\"type\":\"uint256\"}],\"name\":\"addTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getERC20RecipientAndAmount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStablecoinInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_a\",\"type\":\"address\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_methodId\",\"type\":\"bytes4\"}],\"name\":\"isERC20MethodSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_methodId\",\"type\":\"bytes4\"}],\"name\":\"isERC20MethodWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracleNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"redeemableCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"redeemableTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"}],\"name\":\"removeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_loadable\",\"type\":\"bool\"}],\"name\":\"setTokenLoadable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_redeemable\",\"type\":\"bool\"}],\"name\":\"setTokenRedeemable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stablecoin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_updateDate\",\"type\":\"uint256\"}],\"name\":\"updateTokenRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // TokenWhitelistBin is the compiled bytecode used for deploying new contracts. -var TokenWhitelistBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034553480156200005657600080fd5b506040516200282738038062002827833981810160405260808110156200007c57600080fd5b50805160208201516040830151606090930151919290916200009e8462000194565b620000a9826200026b565b603a9290925550603980546001600160a01b0319166001600160a01b039092169190911790555060366020527f36aaa0d2a881446a5d284caf55fe779596f3dd15619675545d6094c8909139c2805460ff1990811660019081179092557fbdd45af1473e0dd27b6e035ccafb153373c61968247ba4b7c0e6c1c96496792f80548216831790557f877171c55a6bbc4aa0ea34a24de07dd3c5952b4a7d66df2b953f79c7955a122780548216831790556323b872dd60e01b6000527f04324ec27bf37ba85969616ff61c6c0e3939d6b141697b749b0be22765b298708054909116909117905562000327565b600054610100900460ff1680620001b05750620001b062000321565b80620001bf575060005460ff16155b620001fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180620027f9602e913960400191505060405180910390fd5b600054610100900460ff1615801562000228576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200025457603380546001600160a01b0319166001600160a01b0384161790555b801562000267576000805461ff00191690555b5050565b600054610100900460ff16806200028757506200028762000321565b8062000296575060005460ff16155b620002d35760405162461bcd60e51b815260040180806020018281038252602e815260200180620027f9602e913960400191505060405180910390fd5b600054610100900460ff16158015620002ff576000805460ff1961ff0019909116610100171660011790555b811562000254576034829055801562000267576000805461ff00191690555050565b303b1590565b6124c280620003376000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636c3824ef116100a2578063996cba6811610071578063996cba6814610582578063afc72e93146105b8578063d545782e14610659578063e2b4ce971461068b578063e9cbd8221461069357610116565b80636c3824ef146104ba5780637d73b2311461052857806380cc0dda1461054c578063872773061461055457610116565b80633efec5e9116100e95780633efec5e9146103ee578063443dd2a4146103f657806344b049bc1461044e5780635d793a7d146104565780636a1744dc1461048457610116565b806313d5e8461461011b5780631d3a069f146101355780631f69565f1461017057806334c73edc1461023e575b600080fd5b61012361069b565b60408051918252519081900360200190f35b61015c6004803603602081101561014b57600080fd5b50356001600160e01b0319166106a1565b604080519115158252519081900360200190f35b6101966004803603602081101561018657600080fd5b50356001600160a01b03166106c4565b6040518080602001888152602001878152602001861515815260200185151581526020018415158152602001838152602001828103825289818151815260200191508051906020019080838360005b838110156101fd5781810151838201526020016101e5565b50505050905090810190601f16801561022a5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b6103ec600480360360c081101561025457600080fd5b810190602081018135600160201b81111561026e57600080fd5b82018360208201111561028057600080fd5b803590602001918460208302840111600160201b831117156102a157600080fd5b919390929091602081019035600160201b8111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460208302840111600160201b831117156102f157600080fd5b919390929091602081019035600160201b81111561030e57600080fd5b82018360208201111561032057600080fd5b803590602001918460208302840111600160201b8311171561034157600080fd5b919390929091602081019035600160201b81111561035e57600080fd5b82018360208201111561037057600080fd5b803590602001918460208302840111600160201b8311171561039157600080fd5b919390929091602081019035600160201b8111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111600160201b831117156103e157600080fd5b9193509150356107c2565b005b610196610c38565b6103fe610d36565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561043a578181015183820152602001610422565b505050509050019250505060405180910390f35b6103fe610d98565b6103ec6004803603604081101561046c57600080fd5b506001600160a01b0381351690602001351515610e7d565b61015c6004803603604081101561049a57600080fd5b5080356001600160a01b031690602001356001600160e01b031916611067565b6103ec600480360360208110156104d057600080fd5b810190602081018135600160201b8111156104ea57600080fd5b8201836020820111156104fc57600080fd5b803590602001918460208302840111600160201b8311171561051d57600080fd5b5090925090506110ee565b61053061139e565b604080516001600160a01b039092168252519081900360200190f35b6101236113ad565b6103ec6004803603604081101561056a57600080fd5b506001600160a01b03813516906020013515156113b3565b6103ec6004803603606081101561059857600080fd5b506001600160a01b038135811691602081013590911690604001356114ef565b610636600480360360408110156105ce57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105f857600080fd5b82018360208201111561060a57600080fd5b803590602001918460018302840111600160201b8311171561062b57600080fd5b50909250905061159c565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103ec6004803603606081101561066f57600080fd5b506001600160a01b0381351690602081013590604001356118bc565b610123611a06565b610530611a0c565b60385490565b6001600160e01b0319811660009081526036602052604090205460ff165b919050565b6001600160a01b038116600090815260356020908152604080832060018082015460028084015460038501546004860154865488516101009782161588026000190190911694909404601f81018a90048a0285018a019098528784526060999889988998899889988998929788979196909560ff8084169694840481169562010000909404169391929189918301828280156107a15780601f10610776576101008083540402835291602001916107a1565b820191906000526020600020905b81548152906001019060200180831161078457829003601f168201915b50505050509650975097509750975097509750975050919395979092949650565b6107cb33611a1b565b610815576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b898814801561082357508986145b801561082e57508984145b801561083957508984145b61088a576040805162461bcd60e51b815260206004820152601e60248201527f706172616d65746572206c656e6774687320646f206e6f74206d617463680000604482015290519081900360640190fd5b60005b8a811015610c2a57603560008d8d848181106108a557fe5b602090810292909201356001600160a01b03168352508101919091526040016000206003015460ff1615610920576040805162461bcd60e51b815260206004820152601760248201527f746f6b656e20616c726561647920617661696c61626c65000000000000000000604482015290519081900360640190fd5b60606109456109408c8c8581811061093457fe5b90506020020135611aa6565b611ad2565b90506040518060e001604052808281526020018a8a8581811061096457fe5b9050602002013581526020016000815260200160011515815260200188888581811061098c57fe5b905060200201351515151581526020018686858181106109a857fe5b9050602002013515151515815260200184815250603560008f8f868181106109cc57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000820151816000019080519060200190610a1892919061230f565b5060208201516001820155604082015160028201556060820151600382018054608085015160a08601511515620100000262ff0000199115156101000261ff001995151560ff199094169390931794909416919091171691909117905560c09091015160049091015560378d8d84818110610a8f57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b039590920293909301359390931692909217905550848483818110610ad757fe5b9050602002013515610af557603854610af1906001611b40565b6038555b7f1802e89da3f6ef84e024e37454c226b1e13bf846ce71cd2a1d24faef9cbf779b338e8e85818110610b2357fe5b905060200201356001600160a01b0316838c8c87818110610b4057fe5b905060200201358b8b88818110610b5357fe5b9050602002013515158a8a89818110610b6857fe5b90506020020135151560405180876001600160a01b03168152602001866001600160a01b031681526020018060200185815260200184151581526020018315158152602001828103825286818151815260200191508051906020019080838360005b83811015610be2578181015183820152602001610bca565b50505050905090810190601f168015610c0f5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a15060010161088d565b505050505050505050505050565b6039546001600160a01b0316600090815260356020908152604080832060018082015460028084015460038501546004860154865488516101009782161588026000190190911694909404601f81018a90048a0285018a019098528784526060999889988998899889988998929788979196909560ff808416969484048116956201000090940416939192918991830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b5050505050965097509750975097509750975097505090919293949596565b60606037805480602002602001604051908101604052809291908181526020018280548015610d8e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d70575b5050505050905090565b60608060385467ffffffffffffffff81118015610db457600080fd5b50604051908082528060200260200182016040528015610dde578160200160208202803683370190505b5090506000805b603754811015610e7557600060378281548110610dfe57fe5b60009182526020808320909101546001600160a01b0316808352603590915260409091206003015490915060ff620100009091041615610e6c5780848481518110610e4557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001830192505b50600101610de5565b509091505090565b610e8633611a1b565b610ed0576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b6001600160a01b03821660009081526035602052604090206003015460ff16610f40576040805162461bcd60e51b815260206004820152601f60248201527f72656465656d61626c653a20746f6b656e206e6f7420617661696c61626c6500604482015290519081900360640190fd5b6001600160a01b03821660009081526035602052604090206003015460ff620100009091041615158115151415610fbe576040805162461bcd60e51b815260206004820152601b60248201527f72656465656d61626c653a206e6f207374617465206368616e67650000000000604482015290519081900360640190fd5b8015610fda57603854610fd2906001611b40565b603855610fec565b603854610fe8906001611ba1565b6038555b6001600160a01b038216600081815260356020908152604091829020600301805485151562010000810262ff0000199092169190911790915582513381529182019390935280820192909252517fcaa111d70d53608b9c8e3278c634595491de54f572a17a297dedad20f517039d9181900360600190a15050565b6001600160a01b03821660009081526035602052604081206003015460ff166110cc576040805162461bcd60e51b81526020600482015260126024820152713737b716b2bc34b9ba34b733903a37b5b2b760711b604482015290519081900360640190fd5b506001600160e01b03191660009081526036602052604090205460ff16919050565b6110f733611a1b565b611141576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b60005b8181101561139957600083838381811061115a57fe5b602090810292909201356001600160a01b0316600081815260359093526040909220600301549192505060ff166111d1576040805162461bcd60e51b8152602060048201526016602482015275746f6b656e206973206e6f7420617661696c61626c6560501b604482015290519081900360640190fd5b6001600160a01b03811660009081526035602052604090206003015462010000900460ff161561120d57603854611209906001611ba1565b6038555b6001600160a01b038116600090815260356020526040812090611230828261238d565b506000600182018190556002820181905560038201805462ffffff1916905560049091018190555b603754611266906001611ba1565b81101561131957816001600160a01b03166037828154811061128457fe5b6000918252602090912001546001600160a01b0316141561131157603780546112ae906001611ba1565b815481106112b857fe5b600091825260209091200154603780546001600160a01b0390921691839081106112de57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611319565b600101611258565b50603780548061132557fe5b6000828152602090819020820160001990810180546001600160a01b0319169055909101909155604080513381526001600160a01b0384169281019290925280517f703f7e3f084d5b8dcc12fddcfd9a70d65b6b21ec7659e4608dbaf4419ede3ad09281900390910190a150600101611144565b505050565b6033546001600160a01b031690565b603a5490565b6113bc33611a1b565b611406576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b6001600160a01b03821660009081526035602052604090206003015460ff16611476576040805162461bcd60e51b815260206004820181905260248201527f6c6f616461626c653a20746f6b656e206973206e6f7420617661696c61626c65604482015290519081900360640190fd5b6001600160a01b0382166000818152603560209081526040918290206003018054851515610100810261ff00199092169190911790915582513381529182019390935280820192909252517f0e086282e8e406857ef1dce65e04a192ad8405e48484524cb2ddbf28e5d84eec9181900360600190a15050565b6114f833611a1b565b611542576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71030b236b4b760511b604482015290519081900360640190fd5b61154d838383611be3565b604080516001600160a01b0380861682528416602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b60008060248310156115f5576040805162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f756768206d6574686f642d656e636f64696e67206279746573604482015290519081900360640190fd5b600061163b600086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c1d9050565b90506116478682611067565b61168d576040805162461bcd60e51b81526020600482015260126024820152711d5b9cdd5c1c1bdc9d1959081b595d1a1bd960721b604482015290519081900360640190fd5b6001600160e01b03198116630852cd8d60e31b14156116f557856116eb600487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c909050565b92509250506118b4565b6001600160e01b031981166323b872dd60e01b14156117ec576064841015611764576040805162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f756768206461746120666f72207472616e7366657246726f6d604482015290519081900360640190fd5b6117a8603086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c9d9050565b6116eb604487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c909050565b604484101561182c5760405162461bcd60e51b81526004018080602001828103825260258152602001806124046025913960400191505060405180910390fd5b611870601086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c9d9050565b6116eb602487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c909050565b935093915050565b60006118c9603a54611d13565b90506118d433611a1b565b806118e75750336001600160a01b038216145b611931576040805162461bcd60e51b815260206004820152601660248201527532b4ba3432b91037b930b1b6329037b91030b236b4b760511b604482015290519081900360640190fd5b6001600160a01b03841660009081526035602052604090206003015460ff1661199a576040805162461bcd60e51b8152602060048201526016602482015275746f6b656e206973206e6f7420617661696c61626c6560501b604482015290519081900360640190fd5b6001600160a01b03841660008181526035602090815260409182902060028101879055600401859055815133815290810192909252818101859052517fdb3a4cfb4cd8ac94343ff7440cee8d05ade309056203f0e53ca49b6db8197c7d9181900360600190a150505050565b60345490565b6039546001600160a01b031690565b6000611a28603454611d13565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a7457600080fd5b505afa158015611a88573d6000803e3d6000fd5b505050506040513d6020811015611a9e57600080fd5b505192915050565b611aae6123d4565b6040516020810160405282815280602083015250611acb82611e34565b8152919050565b606080826000015167ffffffffffffffff81118015611af057600080fd5b506040519080825280601f01601f191660200182016040528015611b1b576020820181803683370190505b5090506000602082019050611b398185602001518660000151611ecd565b5092915050565b600082820183811015611b9a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000611b9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f0b565b6001600160a01b038216611c0957611c046001600160a01b03841682611fa2565b611399565b6113996001600160a01b0383168483612087565b6000611c2a826004611b40565b83511015611c76576040805162461bcd60e51b8152602060048201526014602482015273736c6963696e67206f7574206f662072616e676560601b604482015290519081900360640190fd5b600080611c84846020611b40565b90940151949350505050565b6000611c2a826020611b40565b6000611caa826014611b40565b83511015611cf6576040805162461bcd60e51b8152602060048201526014602482015273736c6963696e67206f7574206f662072616e676560601b604482015290519081900360640190fd5b600080611d04846020611b40565b9094015160601c949350505050565b6033546000906001600160a01b0316611d73576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015611dbf57600080fd5b505afa158015611dd3573d6000803e3d6000fd5b505050506040513d6020811015611de957600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015611a7457600080fd5b60008082611e465760009150506106bf565b6fffffffffffffffffffffffffffffffff8316611e6a57601001600160801b830492505b67ffffffffffffffff8316611e8b5760080168010000000000000000830492505b63ffffffff8316611ea357600401600160201b830492505b61ffff8316611eb85760020162010000830492505b60ff8316611ec4576001015b60200392915050565b5b60208110611eed578151835260209283019290910190601f1901611ece565b905182516020929092036101000a6000190180199091169116179052565b60008184841115611f9a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f5f578181015183820152602001611f47565b50505050905090810190601f168015611f8c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b80471015611ff7576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612042576040519150601f19603f3d011682016040523d82523d6000602084013e612047565b606091505b50509050806113995760405162461bcd60e51b815260040180806020018281038252603a815260200180612429603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113999084906060612129826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121859092919063ffffffff16565b8051909150156113995780806020019051602081101561214857600080fd5b50516113995760405162461bcd60e51b815260040180806020018281038252602a815260200180612463602a913960400191505060405180910390fd5b6060612194848460008561219c565b949350505050565b60606121a785612309565b6121f8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106122375780518252601f199092019160209182019101612218565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612299576040519150601f19603f3d011682016040523d82523d6000602084013e61229e565b606091505b509150915081156122b25791506121949050565b8051156122c25780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611f5f578181015183820152602001611f47565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061235057805160ff191683800117855561237d565b8280016001018555821561237d579182015b8281111561237d578251825591602001919060010190612362565b506123899291506123ee565b5090565b50805460018160011615610100020316600290046000825580601f106123b357506123d1565b601f0160209004906000526020600020908101906123d191906123ee565b50565b604051806040016040528060008152602001600081525090565b5b8082111561238957600081556001016123ef56fe6e6f7420656e6f756768206461746120666f72207472616e736665722f61707070726f7665416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206f3d2ac55bc42359aa22ee8a37f0a57a6533a0bc933a38f54c189a72f833f98464736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var TokenWhitelistBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034553480156200005657600080fd5b506040516200281738038062002817833981810160405260808110156200007c57600080fd5b50805160208201516040830151606090930151919290916200009e8462000194565b620000a9826200026b565b603a9290925550603980546001600160a01b0319166001600160a01b039092169190911790555060366020527f36aaa0d2a881446a5d284caf55fe779596f3dd15619675545d6094c8909139c2805460ff1990811660019081179092557fbdd45af1473e0dd27b6e035ccafb153373c61968247ba4b7c0e6c1c96496792f80548216831790557f877171c55a6bbc4aa0ea34a24de07dd3c5952b4a7d66df2b953f79c7955a122780548216831790556323b872dd60e01b6000527f04324ec27bf37ba85969616ff61c6c0e3939d6b141697b749b0be22765b298708054909116909117905562000327565b600054610100900460ff1680620001b05750620001b062000321565b80620001bf575060005460ff16155b620001fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180620027e9602e913960400191505060405180910390fd5b600054610100900460ff1615801562000228576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200025457603380546001600160a01b0319166001600160a01b0384161790555b801562000267576000805461ff00191690555b5050565b600054610100900460ff16806200028757506200028762000321565b8062000296575060005460ff16155b620002d35760405162461bcd60e51b815260040180806020018281038252602e815260200180620027e9602e913960400191505060405180910390fd5b600054610100900460ff16158015620002ff576000805460ff1961ff0019909116610100171660011790555b811562000254576034829055801562000267576000805461ff00191690555050565b303b1590565b6124b280620003376000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636c3824ef116100a2578063996cba6811610071578063996cba6814610582578063afc72e93146105b8578063d545782e14610659578063e2b4ce971461068b578063e9cbd8221461069357610116565b80636c3824ef146104ba5780637d73b2311461052857806380cc0dda1461054c578063872773061461055457610116565b80633efec5e9116100e95780633efec5e9146103ee578063443dd2a4146103f657806344b049bc1461044e5780635d793a7d146104565780636a1744dc1461048457610116565b806313d5e8461461011b5780631d3a069f146101355780631f69565f1461017057806334c73edc1461023e575b600080fd5b61012361069b565b60408051918252519081900360200190f35b61015c6004803603602081101561014b57600080fd5b50356001600160e01b0319166106a1565b604080519115158252519081900360200190f35b6101966004803603602081101561018657600080fd5b50356001600160a01b03166106c4565b6040518080602001888152602001878152602001861515815260200185151581526020018415158152602001838152602001828103825289818151815260200191508051906020019080838360005b838110156101fd5781810151838201526020016101e5565b50505050905090810190601f16801561022a5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b6103ec600480360360c081101561025457600080fd5b810190602081018135600160201b81111561026e57600080fd5b82018360208201111561028057600080fd5b803590602001918460208302840111600160201b831117156102a157600080fd5b919390929091602081019035600160201b8111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460208302840111600160201b831117156102f157600080fd5b919390929091602081019035600160201b81111561030e57600080fd5b82018360208201111561032057600080fd5b803590602001918460208302840111600160201b8311171561034157600080fd5b919390929091602081019035600160201b81111561035e57600080fd5b82018360208201111561037057600080fd5b803590602001918460208302840111600160201b8311171561039157600080fd5b919390929091602081019035600160201b8111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111600160201b831117156103e157600080fd5b9193509150356107c2565b005b610196610c35565b6103fe610d33565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561043a578181015183820152602001610422565b505050509050019250505060405180910390f35b6103fe610d95565b6103ec6004803603604081101561046c57600080fd5b506001600160a01b0381351690602001351515610e7a565b61015c6004803603604081101561049a57600080fd5b5080356001600160a01b031690602001356001600160e01b031916611061565b6103ec600480360360208110156104d057600080fd5b810190602081018135600160201b8111156104ea57600080fd5b8201836020820111156104fc57600080fd5b803590602001918460208302840111600160201b8311171561051d57600080fd5b5090925090506110e8565b610530611395565b604080516001600160a01b039092168252519081900360200190f35b6101236113a4565b6103ec6004803603604081101561056a57600080fd5b506001600160a01b03813516906020013515156113aa565b6103ec6004803603606081101561059857600080fd5b506001600160a01b038135811691602081013590911690604001356114e3565b610636600480360360408110156105ce57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105f857600080fd5b82018360208201111561060a57600080fd5b803590602001918460018302840111600160201b8311171561062b57600080fd5b50909250905061158d565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6103ec6004803603606081101561066f57600080fd5b506001600160a01b0381351690602081013590604001356118ad565b6101236119f7565b6105306119fd565b60385490565b6001600160e01b0319811660009081526036602052604090205460ff165b919050565b6001600160a01b038116600090815260356020908152604080832060018082015460028084015460038501546004860154865488516101009782161588026000190190911694909404601f81018a90048a0285018a019098528784526060999889988998899889988998929788979196909560ff8084169694840481169562010000909404169391929189918301828280156107a15780601f10610776576101008083540402835291602001916107a1565b820191906000526020600020905b81548152906001019060200180831161078457829003601f168201915b50505050509650975097509750975097509750975050919395979092949650565b6107cb33611a0c565b610812576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b898814801561082057508986145b801561082b57508984145b801561083657508984145b610887576040805162461bcd60e51b815260206004820152601e60248201527f706172616d65746572206c656e6774687320646f206e6f74206d617463680000604482015290519081900360640190fd5b60005b8a811015610c2757603560008d8d848181106108a257fe5b602090810292909201356001600160a01b03168352508101919091526040016000206003015460ff161561091d576040805162461bcd60e51b815260206004820152601760248201527f746f6b656e20616c726561647920617661696c61626c65000000000000000000604482015290519081900360640190fd5b606061094261093d8c8c8581811061093157fe5b90506020020135611a97565b611ac3565b90506040518060e001604052808281526020018a8a8581811061096157fe5b9050602002013581526020016000815260200160011515815260200188888581811061098957fe5b905060200201351515151581526020018686858181106109a557fe5b9050602002013515151515815260200184815250603560008f8f868181106109c957fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000820151816000019080519060200190610a15929190612300565b5060208201516001820155604082015160028201556060820151600382018054608085015160a08601511515620100000262ff0000199115156101000261ff001995151560ff199094169390931794909416919091171691909117905560c09091015160049091015560378d8d84818110610a8c57fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b039590920293909301359390931692909217905550848483818110610ad457fe5b9050602002013515610af257603854610aee906001611b31565b6038555b7f1802e89da3f6ef84e024e37454c226b1e13bf846ce71cd2a1d24faef9cbf779b338e8e85818110610b2057fe5b905060200201356001600160a01b0316838c8c87818110610b3d57fe5b905060200201358b8b88818110610b5057fe5b9050602002013515158a8a89818110610b6557fe5b90506020020135151560405180876001600160a01b03168152602001866001600160a01b031681526020018060200185815260200184151581526020018315158152602001828103825286818151815260200191508051906020019080838360005b83811015610bdf578181015183820152602001610bc7565b50505050905090810190601f168015610c0c5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a15060010161088a565b505050505050505050505050565b6039546001600160a01b0316600090815260356020908152604080832060018082015460028084015460038501546004860154865488516101009782161588026000190190911694909404601f81018a90048a0285018a019098528784526060999889988998899889988998929788979196909560ff808416969484048116956201000090940416939192918991830182828015610d145780601f10610ce957610100808354040283529160200191610d14565b820191906000526020600020905b815481529060010190602001808311610cf757829003601f168201915b5050505050965097509750975097509750975097505090919293949596565b60606037805480602002602001604051908101604052809291908181526020018280548015610d8b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6d575b5050505050905090565b60608060385467ffffffffffffffff81118015610db157600080fd5b50604051908082528060200260200182016040528015610ddb578160200160208202803683370190505b5090506000805b603754811015610e7257600060378281548110610dfb57fe5b60009182526020808320909101546001600160a01b0316808352603590915260409091206003015490915060ff620100009091041615610e695780848481518110610e4257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001830192505b50600101610de2565b509091505090565b610e8333611a0c565b610eca576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6001600160a01b03821660009081526035602052604090206003015460ff16610f3a576040805162461bcd60e51b815260206004820152601f60248201527f72656465656d61626c653a20746f6b656e206e6f7420617661696c61626c6500604482015290519081900360640190fd5b6001600160a01b03821660009081526035602052604090206003015460ff620100009091041615158115151415610fb8576040805162461bcd60e51b815260206004820152601b60248201527f72656465656d61626c653a206e6f207374617465206368616e67650000000000604482015290519081900360640190fd5b8015610fd457603854610fcc906001611b31565b603855610fe6565b603854610fe2906001611b92565b6038555b6001600160a01b038216600081815260356020908152604091829020600301805485151562010000810262ff0000199092169190911790915582513381529182019390935280820192909252517fcaa111d70d53608b9c8e3278c634595491de54f572a17a297dedad20f517039d9181900360600190a15050565b6001600160a01b03821660009081526035602052604081206003015460ff166110c6576040805162461bcd60e51b81526020600482015260126024820152713737b716b2bc34b9ba34b733903a37b5b2b760711b604482015290519081900360640190fd5b506001600160e01b03191660009081526036602052604090205460ff16919050565b6110f133611a0c565b611138576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b60005b8181101561139057600083838381811061115157fe5b602090810292909201356001600160a01b0316600081815260359093526040909220600301549192505060ff166111c8576040805162461bcd60e51b8152602060048201526016602482015275746f6b656e206973206e6f7420617661696c61626c6560501b604482015290519081900360640190fd5b6001600160a01b03811660009081526035602052604090206003015462010000900460ff161561120457603854611200906001611b92565b6038555b6001600160a01b038116600090815260356020526040812090611227828261237e565b506000600182018190556002820181905560038201805462ffffff1916905560049091018190555b60375461125d906001611b92565b81101561131057816001600160a01b03166037828154811061127b57fe5b6000918252602090912001546001600160a01b0316141561130857603780546112a5906001611b92565b815481106112af57fe5b600091825260209091200154603780546001600160a01b0390921691839081106112d557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611310565b60010161124f565b50603780548061131c57fe5b6000828152602090819020820160001990810180546001600160a01b0319169055909101909155604080513381526001600160a01b0384169281019290925280517f703f7e3f084d5b8dcc12fddcfd9a70d65b6b21ec7659e4608dbaf4419ede3ad09281900390910190a15060010161113b565b505050565b6033546001600160a01b031690565b603a5490565b6113b333611a0c565b6113fa576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b6001600160a01b03821660009081526035602052604090206003015460ff1661146a576040805162461bcd60e51b815260206004820181905260248201527f6c6f616461626c653a20746f6b656e206973206e6f7420617661696c61626c65604482015290519081900360640190fd5b6001600160a01b0382166000818152603560209081526040918290206003018054851515610100810261ff00199092169190911790915582513381529182019390935280820192909252517f0e086282e8e406857ef1dce65e04a192ad8405e48484524cb2ddbf28e5d84eec9181900360600190a15050565b6114ec33611a0c565b611533576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1030b236b4b760691b604482015290519081900360640190fd5b61153e838383611bd4565b604080516001600160a01b0380861682528416602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b60008060248310156115e6576040805162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f756768206d6574686f642d656e636f64696e67206279746573604482015290519081900360640190fd5b600061162c600086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c0e9050565b90506116388682611061565b61167e576040805162461bcd60e51b81526020600482015260126024820152711d5b9cdd5c1c1bdc9d1959081b595d1a1bd960721b604482015290519081900360640190fd5b6001600160e01b03198116630852cd8d60e31b14156116e657856116dc600487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c819050565b92509250506118a5565b6001600160e01b031981166323b872dd60e01b14156117dd576064841015611755576040805162461bcd60e51b815260206004820181905260248201527f6e6f7420656e6f756768206461746120666f72207472616e7366657246726f6d604482015290519081900360640190fd5b611799603086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c8e9050565b6116dc604487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c819050565b604484101561181d5760405162461bcd60e51b815260040180806020018281038252602481526020018061242f6024913960400191505060405180910390fd5b611861601086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c8e9050565b6116dc602487878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611c819050565b935093915050565b60006118ba603a54611d04565b90506118c533611a0c565b806118d85750336001600160a01b038216145b611922576040805162461bcd60e51b815260206004820152601660248201527532b4ba3432b91037b930b1b6329037b91030b236b4b760511b604482015290519081900360640190fd5b6001600160a01b03841660009081526035602052604090206003015460ff1661198b576040805162461bcd60e51b8152602060048201526016602482015275746f6b656e206973206e6f7420617661696c61626c6560501b604482015290519081900360640190fd5b6001600160a01b03841660008181526035602090815260409182902060028101879055600401859055815133815290810192909252818101859052517fdb3a4cfb4cd8ac94343ff7440cee8d05ade309056203f0e53ca49b6db8197c7d9181900360600190a150505050565b60345490565b6039546001600160a01b031690565b6000611a19603454611d04565b6001600160a01b03166324d7806c836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a6557600080fd5b505afa158015611a79573d6000803e3d6000fd5b505050506040513d6020811015611a8f57600080fd5b505192915050565b611a9f6123c5565b6040516020810160405282815280602083015250611abc82611e25565b8152919050565b606080826000015167ffffffffffffffff81118015611ae157600080fd5b506040519080825280601f01601f191660200182016040528015611b0c576020820181803683370190505b5090506000602082019050611b2a8185602001518660000151611ebe565b5092915050565b600082820183811015611b8b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000611b8b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611efc565b6001600160a01b038216611bfa57611bf56001600160a01b03841682611f93565b611390565b6113906001600160a01b0383168483612078565b6000611c1b826004611b31565b83511015611c67576040805162461bcd60e51b8152602060048201526014602482015273736c6963696e67206f7574206f662072616e676560601b604482015290519081900360640190fd5b600080611c75846020611b31565b90940151949350505050565b6000611c1b826020611b31565b6000611c9b826014611b31565b83511015611ce7576040805162461bcd60e51b8152602060048201526014602482015273736c6963696e67206f7574206f662072616e676560601b604482015290519081900360640190fd5b600080611cf5846020611b31565b9094015160601c949350505050565b6033546000906001600160a01b0316611d64576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b158015611db057600080fd5b505afa158015611dc4573d6000803e3d6000fd5b505050506040513d6020811015611dda57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b158015611a6557600080fd5b60008082611e375760009150506106bf565b6fffffffffffffffffffffffffffffffff8316611e5b57601001600160801b830492505b67ffffffffffffffff8316611e7c5760080168010000000000000000830492505b63ffffffff8316611e9457600401600160201b830492505b61ffff8316611ea95760020162010000830492505b60ff8316611eb5576001015b60200392915050565b5b60208110611ede578151835260209283019290910190601f1901611ebf565b905182516020929092036101000a6000190180199091169116179052565b60008184841115611f8b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f50578181015183820152602001611f38565b50505050905090810190601f168015611f7d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b80471015611fe8576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612033576040519150601f19603f3d011682016040523d82523d6000602084013e612038565b606091505b50509050806113905760405162461bcd60e51b815260040180806020018281038252603a8152602001806123f5603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611390908490606061211a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121769092919063ffffffff16565b8051909150156113905780806020019051602081101561213957600080fd5b50516113905760405162461bcd60e51b815260040180806020018281038252602a815260200180612453602a913960400191505060405180910390fd5b6060612185848460008561218d565b949350505050565b6060612198856122fa565b6121e9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106122285780518252601f199092019160209182019101612209565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461228a576040519150601f19603f3d011682016040523d82523d6000602084013e61228f565b606091505b509150915081156122a35791506121859050565b8051156122b35780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611f50578181015183820152602001611f38565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061234157805160ff191683800117855561236e565b8280016001018555821561236e579182015b8281111561236e578251825591602001919060010190612353565b5061237a9291506123df565b5090565b50805460018160011615610100020316600290046000825580601f106123a457506123c2565b601f0160209004906000526020600020908101906123c291906123df565b50565b604051806040016040528060008152602001600081525090565b5b8082111561237a57600081556001016123e056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465646e6f7420656e6f756768206461746120666f72207472616e736665722f617070726f76655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212207d4c667b89d2402925968fe6cd1e0f847a8292e041a0098516939d2f20dccdf964736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployTokenWhitelist deploys a new Ethereum contract, binding an instance of TokenWhitelist to it. func DeployTokenWhitelist(auth *bind.TransactOpts, backend bind.ContractBackend, _ens_ common.Address, _oracleNode_ [32]byte, _controllerNode_ [32]byte, _stablecoinAddress_ common.Address) (common.Address, *types.Transaction, *TokenWhitelist, error) { diff --git a/pkg/bindings/wallet.go b/pkg/bindings/wallet.go index 84cd5ef6..2eaf987b 100644 --- a/pkg/bindings/wallet.go +++ b/pkg/bindings/wallet.go @@ -28,10 +28,10 @@ var ( ) // WalletABI is the input ABI used to generate the binding from. -const WalletABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"AddedToWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"CancelledWhitelistAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"CancelledWhitelistRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutedRelayedTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutedTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentNonce\",\"type\":\"uint256\"}],\"name\":\"IncreasedRelayNonce\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LoadedTokenCard\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_locked\",\"type\":\"address\"}],\"name\":\"LockedOwnership\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"RemovedFromWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SetGasTopUpLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SetLoadLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SetSpendLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SubmittedGasTopUpLimitUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SubmittedLoadLimitUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SubmittedSpendLimitUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"SubmittedWhitelistAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"SubmittedWhitelistRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ToppedUpGas\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Transferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"TransferredOwnership\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UpdatedAvailableLimit\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WALLET_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_transactionBatch\",\"type\":\"bytes\"}],\"name\":\"batchExecuteTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"calculateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"cancelWhitelistAddition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"cancelWhitelistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"confirmGasTopUpLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"confirmLoadLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"confirmSpendLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"confirmWhitelistAddition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"confirmWhitelistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"convertToEther\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"convertToStablecoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"executeRelayedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"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\":\"gasTopUpLimitAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTopUpLimitControllerConfirmationRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTopUpLimitPending\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasTopUpLimitValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseRelayNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_transferable_\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_licenceNode_\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_spendLimit_\",\"type\":\"uint256\"}],\"name\":\"initializeWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSetWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hashedData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loadLimitAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loadLimitControllerConfirmationRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loadLimitPending\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loadLimitValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"loadTokenCard\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingWhitelistAddition\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingWhitelistRemoval\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setGasTopUpLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setLoadLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setSpendLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"setWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spendLimitAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spendLimitControllerConfirmationRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spendLimitPending\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spendLimitValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"submitGasTopUpLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"submitLoadLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"submitSpendLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"submitWhitelistAddition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"submitWhitelistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submittedWhitelistAddition\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submittedWhitelistRemoval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"topUpGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_transferable\",\"type\":\"bool\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"whitelistArray\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistMap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" +const WalletABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"AddedToWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"CancelledWhitelistAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"CancelledWhitelistRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_privileged\",\"type\":\"bool\"}],\"name\":\"ExecutedRelayedTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutedTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentNonce\",\"type\":\"uint256\"}],\"name\":\"IncreasedRelayNonce\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_nextReset\",\"type\":\"uint256\"}],\"name\":\"InitializedDailyLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LoadedTokenCard\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_locked\",\"type\":\"address\"}],\"name\":\"LockedOwnership\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"RemovedFromWhitelist\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SetDailyLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"SetMonolith2FA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_p2FA\",\"type\":\"address\"}],\"name\":\"SetPersonal2FA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"SubmittedDailyLimitUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"SubmittedWhitelistAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"SubmittedWhitelistRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ToppedUpGas\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Transferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"TransferredOwnership\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_nextReset\",\"type\":\"uint256\"}],\"name\":\"UpdatedAvailableDailyLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UpdatedAvailableLimit\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WALLET_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_transactionBatch\",\"type\":\"bytes\"}],\"name\":\"batchExecuteTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"calculateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"cancelWhitelistAddition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"cancelWhitelistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"confirmDailyLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"confirmWhitelistAddition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"confirmWhitelistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"convertToStablecoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dailyLimitAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dailyLimitPending\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dailyLimitValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"executePrivilegedRelayedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"executeRelayedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_destination\",\"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\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseRelayNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_transferable_\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_licenceNode_\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_dailyLimit_\",\"type\":\"uint256\"}],\"name\":\"initializeWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSetWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTransferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hashedData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"loadTokenCard\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"monolith2FA\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingWhitelistAddition\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingWhitelistRemoval\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"personal2FA\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"privileged\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setMonolith2FA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_p2FA\",\"type\":\"address\"}],\"name\":\"setPersonal2FA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"setWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"submitDailyLimitUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"submitWhitelistAddition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"name\":\"submitWhitelistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submittedWhitelistAddition\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submittedWhitelistRemoval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"topUpGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_transferable\",\"type\":\"bool\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"whitelistArray\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistMap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // WalletBin is the compiled bytecode used for deploying new contracts. -var WalletBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d39660455534801561007957600080fd5b50615dc2806200008a6000396000f3fe6080604052600436106103975760003560e01c8063877337b0116101dc578063cccdc55611610102578063e61c51ca116100a0578063f41c43191161006f578063f41c43191461107e578063f4217648146110a8578063f776f51814611123578063f8b2cb4f1461113857610397565b8063e61c51ca14610fc7578063eadd3cea14610ff1578063f36febda1461101b578063f40b51f81461105457610397565b8063d251fefc116100dc578063d251fefc14610f5e578063da84b1ed14610f88578063de212bf314610f9d578063e2b4ce9714610fb257610397565b8063cccdc55614610e71578063cd7958dd14610e86578063ce0b5bd514610f3457610397565b8063b242e5341161017a578063beabacc811610149578063beabacc814610dda578063c4856cd914610e1d578063cbd2ac6814610e32578063cc0e7e5614610e5c57610397565b8063b242e53414610d3c578063b87e21ef14610d77578063bcb8b74a14610db0578063be40ba7914610dc557610397565b80639b0dfd27116101b65780639b0dfd2714610c37578063aaf1fc6214610c4c578063ab20599314610cfd578063b221f31614610d1257610397565b8063877337b014610bf85780638da5cb5b14610c0d57806390e690c714610c2257610397565b80633bfec254116102c15780636137d6701161025f578063747c31d61161022e578063747c31d614610b225780637d73b23114610b375780637d7d004614610b685780637fd004fa14610b7d57610397565b80636137d67014610a0d57806369efdfc014610a88578063715018a614610ae357806374624c5514610af857610397565b806346efe0ed1161029b57806346efe0ed146108e757806347b55a9d146109b95780635adc02ab146109ce5780635d2362a8146109f857610397565b80633bfec254146107cd5780633c672eb7146107f75780633f579f421461082157610397565b806320c13b0b1161033957806326d05ab21161030857806326d05ab2146106f4578063294f40251461070957806332531c3c1461076e5780633a43199f146107a157610397565b806320c13b0b146105d55780632121dc75146106a057806321ce918d146106b55780632587a6a2146106df57610397565b8063100f23fd11610375578063100f23fd146104375780631127b57e146104615780631626ba7e146104eb5780631efd0299146105c057610397565b806301ffc9a71461039c578063027ef3eb146103e45780630f3a85d81461040b575b600080fd5b3480156103a857600080fd5b506103d0600480360360208110156103bf57600080fd5b50356001600160e01b03191661116b565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103f9611185565b60408051918252519081900360200190f35b34801561041757600080fd5b506104356004803603602081101561042e57600080fd5b503561118b565b005b34801561044357600080fd5b506104356004803603602081101561045a57600080fd5b5035611291565b34801561046d57600080fd5b50610476611436565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104b0578181015183820152602001610498565b50505050905090810190601f1680156104dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104f757600080fd5b506105a36004803603604081101561050e57600080fd5b81359190810190604081016020820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460018302840111600160201b8311171561056257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611457945050505050565b604080516001600160e01b03199092168252519081900360200190f35b3480156105cc57600080fd5b506103f96114c6565b3480156105e157600080fd5b506105a3600480360360408110156105f857600080fd5b810190602081018135600160201b81111561061257600080fd5b82018360208201111561062457600080fd5b803590602001918460018302840111600160201b8311171561064557600080fd5b919390929091602081019035600160201b81111561066257600080fd5b82018360208201111561067457600080fd5b803590602001918460018302840111600160201b8311171561069557600080fd5b5090925090506114d7565b3480156106ac57600080fd5b506103d06115ae565b3480156106c157600080fd5b50610435600480360360208110156106d857600080fd5b50356115be565b3480156106eb57600080fd5b506103f9611656565b34801561070057600080fd5b506103d061165c565b34801561071557600080fd5b5061071e611665565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561075a578181015183820152602001610742565b505050509050019250505060405180910390f35b34801561077a57600080fd5b506103d06004803603602081101561079157600080fd5b50356001600160a01b03166116c7565b610435600480360360408110156107b757600080fd5b506001600160a01b0381351690602001356116dc565b3480156107d957600080fd5b50610435600480360360208110156107f057600080fd5b50356118fc565b34801561080357600080fd5b506104356004803603602081101561081a57600080fd5b50356119ee565b34801561082d57600080fd5b506104766004803603606081101561084457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460018302840111600160201b831117156108a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a8e945050505050565b3480156108f357600080fd5b506104356004803603606081101561090a57600080fd5b81359190810190604081016020820135600160201b81111561092b57600080fd5b82018360208201111561093d57600080fd5b803590602001918460018302840111600160201b8311171561095e57600080fd5b919390929091602081019035600160201b81111561097b57600080fd5b82018360208201111561098d57600080fd5b803590602001918460018302840111600160201b831117156109ae57600080fd5b509092509050611f61565b3480156109c557600080fd5b5061071e612299565b3480156109da57600080fd5b50610435600480360360208110156109f157600080fd5b50356122f9565b348015610a0457600080fd5b506103f96125c0565b348015610a1957600080fd5b5061043560048036036020811015610a3057600080fd5b810190602081018135600160201b811115610a4a57600080fd5b820183602082011115610a5c57600080fd5b803590602001918460208302840111600160201b83111715610a7d57600080fd5b5090925090506125cc565b348015610a9457600080fd5b50610435600480360360e0811015610aab57600080fd5b506001600160a01b03813581169160208101351515916040820135169060608101359060808101359060a08101359060c001356127f2565b348015610aef57600080fd5b506104356128d6565b348015610b0457600080fd5b5061043560048036036020811015610b1b57600080fd5b50356129d4565b348015610b2e57600080fd5b506103f9612ad2565b348015610b4357600080fd5b50610b4c612ad8565b604080516001600160a01b039092168252519081900360200190f35b348015610b7457600080fd5b506103f9612ae7565b348015610b8957600080fd5b5061043560048036036020811015610ba057600080fd5b810190602081018135600160201b811115610bba57600080fd5b820183602082011115610bcc57600080fd5b803590602001918460208302840111600160201b83111715610bed57600080fd5b509092509050612af3565b348015610c0457600080fd5b506103f9612e35565b348015610c1957600080fd5b50610b4c612e3b565b348015610c2e57600080fd5b50610435612e4a565b348015610c4357600080fd5b506103f9612ea7565b348015610c5857600080fd5b5061043560048036036020811015610c6f57600080fd5b810190602081018135600160201b811115610c8957600080fd5b820183602082011115610c9b57600080fd5b803590602001918460018302840111600160201b83111715610cbc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612ead945050505050565b348015610d0957600080fd5b506103d0612fce565b348015610d1e57600080fd5b5061043560048036036020811015610d3557600080fd5b5035612fd7565b348015610d4857600080fd5b5061043560048036036040811015610d5f57600080fd5b506001600160a01b03813516906020013515156130c1565b348015610d8357600080fd5b506103f960048036036040811015610d9a57600080fd5b506001600160a01b03813516906020013561327b565b348015610dbc57600080fd5b506103d06132ff565b348015610dd157600080fd5b506103d0613308565b348015610de657600080fd5b5061043560048036036060811015610dfd57600080fd5b506001600160a01b03813581169160208101359091169060400135613317565b348015610e2957600080fd5b506103f961349b565b348015610e3e57600080fd5b5061043560048036036020811015610e5557600080fd5b50356134a1565b348015610e6857600080fd5b506103f9613828565b348015610e7d57600080fd5b506103f961382e565b348015610e9257600080fd5b506103f960048036036020811015610ea957600080fd5b810190602081018135600160201b811115610ec357600080fd5b820183602082011115610ed557600080fd5b803590602001918460208302840111600160201b83111715610ef657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613834945050505050565b348015610f4057600080fd5b5061043560048036036020811015610f5757600080fd5b503561388e565b348015610f6a57600080fd5b50610b4c60048036036020811015610f8157600080fd5b5035613a37565b348015610f9457600080fd5b506103f9613a5e565b348015610fa957600080fd5b506103d0613a64565b348015610fbe57600080fd5b506103f9613a72565b348015610fd357600080fd5b5061043560048036036020811015610fea57600080fd5b5035613a78565b348015610ffd57600080fd5b506104356004803603602081101561101457600080fd5b5035613c09565b34801561102757600080fd5b506103f96004803603604081101561103e57600080fd5b506001600160a01b038135169060200135613c5c565b34801561106057600080fd5b506104356004803603602081101561107757600080fd5b5035613e03565b34801561108a57600080fd5b50610435600480360360208110156110a157600080fd5b5035613e56565b3480156110b457600080fd5b50610435600480360360208110156110cb57600080fd5b810190602081018135600160201b8111156110e557600080fd5b8201836020820111156110f757600080fd5b803590602001918460208302840111600160201b8311171561111857600080fd5b509092509050613ea9565b34801561112f57600080fd5b506103d06141fb565b34801561114457600080fd5b506103f96004803603602081101561115b57600080fd5b50356001600160a01b0316614204565b6001600160e01b031981166301ffc9a760e01b145b919050565b603e5490565b6111943361420f565b8061119e57503330145b6111e2576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c680001115801561120157506706f05b59d3b200008111155b611248576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b611253604082614223565b604080513381526020810183905281517f41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e929181900390910190a150565b61129a3361420f565b806112a957506112a93361428c565b6112f3576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a5460ff16611342576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6113a5603880548060200260200160405190810160405280929190818152602001828054801561139b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161137d575b5050505050613834565b81146113e25760405162461bcd60e51b8152600401808060200182810382526023815260200180615d346023913960400191505060405180910390fd5b6113ee60386000615b22565b603a805460ff19169055604080513381526020810183905281517f7794eff834d760583543e6e510e717a5e66d2c064e225f4db448343c3e66afcf929181900390910190a150565b60405180604001604052806005815260200164332e342e3160d81b81525081565b6000806114648484614317565b905061146f8161420f565b6114b4576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b50630b135d3f60e11b90505b92915050565b60006114d26047614502565b905090565b6000808585604051602001808383808284376040805191909301818103601f190182528084528151602092830120601f8b01839004830282018301909452898152929650630b135d3f60e11b955061154e945086935089915088908190840183828082843760009201919091525061145792505050565b6001600160e01b0319161461159a576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b506320c13b0b60e01b90505b949350505050565b603554600160a01b900460ff1690565b6115c73361420f565b806115d157503330145b611615576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b611620603b82614531565b6040805182815290517f4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da919181900360200190a150565b60405490565b603a5460ff1681565b606060398054806020026020016040519081016040528092919081815260200182805480156116bd57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161169f575b5050505050905090565b60366020526000908152604090205460ff1681565b6116e53361420f565b806116ef57503330145b611733576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b61173c82614592565b611782576040805162461bcd60e51b8152602060048201526012602482015271746f6b656e206e6f74206c6f616461626c6560701b604482015290519081900360640190fd5b600061178e8383613c5c565b905061179b6047826145ac565b60006117a8604d5461461c565b90506001600160a01b03841615611841576117cd6001600160a01b038516828561473d565b806001600160a01b0316631b3c96b485856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b505050506118b2565b806001600160a01b0316631b3c96b48486866040518463ffffffff1660e01b815260040180836001600160a01b03168152602001828152602001925050506000604051808303818588803b15801561189857600080fd5b505af11580156118ac573d6000803e3d6000fd5b50505050505b604080516001600160a01b03861681526020810185905281517f5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a929181900390910190a150505050565b6119053361420f565b8061190f57503330145b611953576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6046548111156119a5576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b6119b0604782614223565b604080513381526020810183905281517f0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef929181900390910190a150565b6119f73361420f565b80611a0157503330145b611a45576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b611a50603b82614223565b604080513381526020810183905281517f068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21929181900390910190a150565b6060611a993361420f565b80611aa357503330145b611ae7576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b6001600160a01b03841660009081526036602052604090205460ff16611b1257611b12603b846145ac565b611b24846001600160a01b0316614855565b8015611b345750611b348461485b565b15611d0657600080611b468685614875565b6001600160a01b038216600090815260366020526040902054919350915060ff16611b86576000611b77878361327b565b9050611b84603b826145ac565b505b611b996001600160a01b03871685614976565b604080516020808252818301909252606091602082018180368337019050509050600160f81b81601f81518110611bcc57fe5b60200101906001600160f81b031916908160001a9053507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138787878460405180856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611c5e578181015183820152602001611c46565b50505050905090810190601f168015611c8b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611cbe578181015183820152602001611ca6565b50505050905090810190601f168015611ceb5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a19250611f5a915050565b60006060856001600160a01b031685856040518082805190602001908083835b60208310611d455780518252601f199092019160209182019101611d26565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611da7576040519150601f19603f3d011682016040523d82523d6000602084013e611dac565b606091505b5091509150818190611e3c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e01578181015183820152602001611de9565b50505050905090810190601f168015611e2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138686868460405180856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611eb8578181015183820152602001611ea0565b50505050905090810190601f168015611ee55780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f18578181015183820152602001611f00565b50505050905090810190601f168015611f455780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a19150505b9392505050565b611f6a3361428c565b611fa9576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c56833981519152604482015290519081900360640190fd5b60004690506000612020823089898960405160200180806836b7b737b634ba341d60b91b815250600901868152602001856001600160a01b031660601b8152601401848152602001838380828437808301925050509550505050505060405160208183030381529060405280519060200120614a27565b9050631626ba7e60e01b6001600160e01b0319166120748286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061145792505050565b6001600160e01b031916146120c0576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b604c548714612102576040805162461bcd60e51b81526020600482015260096024820152687478207265706c617960b81b604482015290519081900360640190fd5b61210a614a78565b60006060306001600160a01b03168888604051808383808284376040519201945060009350909150508083038183865af19150503d806000811461216a576040519150601f19603f3d011682016040523d82523d6000602084013e61216f565b606091505b50915091508181906121c25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e01578181015183820152602001611de9565b507f823dbcf2b7b0f265871963ca65ac033f6b4c71e0d82cd123d2ff23d752dc21c188888360405180806020018060200183810383528686828181526020019250808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b83811015612251578181015183820152602001612239565b50505050905090810190601f16801561227e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050505050505050565b606060388054806020026020016040519081016040528092919081815260200182805480156116bd576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161169f575050505050905090565b6123023361428c565b612341576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c56833981519152604482015290519081900360640190fd5b603a5460ff16612390576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6123f1603880548060200260200160405190810160405280929190818152602001828054801561139b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161137d575050505050613834565b811461242e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615d346023913960400191505060405180910390fd5b60005b60385481101561251557603660006038838154811061244c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1661250d576001603660006038848154811061248b57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790556038805460379190839081106124d157fe5b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b600101612431565b507fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a33603860405180836001600160a01b0316815260200180602001828103825283818154815260200191508054801561259857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161257a575b5050935050505060405180910390a16125b360386000615b22565b50603a805460ff19169055565b60006114d2603b614502565b6125d53361420f565b806125df57503330145b612623576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff1615801561263e5750603a54610100900460ff16155b61268f576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b603a5462010000900460ff166126e8576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b8061272c576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b61273860398383615b40565b50603a805461ff00191661010017905560408051602080840282810182019093528382527ffbc0e5ca6c7e4858daf0fdb185ef5186203e74ec9c64737e93c0aeaec596e1d192859285926127a79285918591829185019084908082843760009201919091525061383492505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b600054610100900460ff168061280b575061280b614ac0565b80612819575060005460ff16155b6128545760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff1615801561287f576000805460ff1961ff0019909116610100171660011790555b61288886614ac6565b61289184614b94565b61289b8888614c41565b6128a482614da0565b6128ac614e8b565b6128b585614f7c565b604d83905580156128cc576000805461ff00191690555b5050505050505050565b6128df3361420f565b612929576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16612987576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b6129dd3361420f565b806129e757503330145b612a2b576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8066038d7ea4c6800011158015612a4a57506706f05b59d3b200008111155b612a91576040805162461bcd60e51b815260206004820152601360248201527206f7574206f662072616e676520746f702d757606c1b604482015290519081900360640190fd5b612a9c604082614531565b6040805182815290517faf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c9181900360200190a150565b604d5490565b6033546001600160a01b031690565b60006114d26040614502565b612afc3361420f565b80612b0657503330145b612b4a576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b603a5460ff16158015612b655750603a54610100900460ff16155b612bb6576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c6973742073756d62697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015612cd257612c0f828281518110612c0257fe5b602002602001015161420f565b15612c5a576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110612c7157fe5b60200260200101516001600160a01b03161415612cca576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101612bea565b50603a5462010000900460ff16612d2c576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b81612d70576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b612d7c60388484615b40565b50603a805460ff1916600117905560408051602080850282810182019093528482527f9c80b3b5f68b3e017766d59e8d09b34efe6462b05c398f35cab9e271d9bc3b9c9286928692612de99285918591829185019084908082843760009201919091525061383492505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b60455490565b6035546001600160a01b031690565b612e533361420f565b612e9d576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b612ea5614a78565b565b603b5490565b612eb63361420f565b80612ec057503330145b612f04576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8051602080820191906000808060605b868510156128cc57612f278660546150ce565b888601805160148201516034909201805193995060609190911c96509094509092509050612f606054612f5a8785615110565b90615110565b945086851115612fa7576040805162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b604482015290519081900360640190fd5b81612fbd57506040805160208101909152600081525b612fc8848483611a8e565b50612f14565b604b5460ff1690565b612fe03361420f565b80612fea57503330145b61302e576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b604654811115613080576040805162461bcd60e51b81526020600482015260186024820152771bdd5d081bd9881c985b99d9481b1bd85908185b5bdd5b9d60421b604482015290519081900360640190fd5b61308b604782614531565b6040805182815290517fc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d109181900360200190a150565b6130ca3361420f565b613114576040805162461bcd60e51b815260206004820152601660248201527539b2b73232b91034b9903737ba1030b71037bbb732b960511b604482015290519081900360640190fd5b603554600160a01b900460ff16613172576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b0382166131b75760405162461bcd60e51b8152600401808060200182810382526023815260200180615ce76023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b831515021790558061321057604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008061328a8661516a565b5050509350935093505080156132f357816132d5576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b6132e9836132e387856152f3565b9061534c565b93505050506114c0565b50600095945050505050565b603f5460ff1690565b603a5462010000900460ff1681565b6133203361420f565b8061332a57503330145b61336e576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b80806133ab576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b6001600160a01b0384166133f6576040805162461bcd60e51b815260206004820152600d60248201526c064657374696e6174696f6e3d3609c1b604482015290519081900360640190fd5b6001600160a01b03841660009081526036602052604090205460ff1661344057816001600160a01b0384161561343357613430848461327b565b90505b61343e603b826145ac565b505b61344b84848461538e565b604080516001600160a01b0380871682528516602082015280820184905290517fd1ba4ac2e2a11b5101f6cb4d978f514a155b421e8ec396d2d9abaf0bb02917ee9181900360600190a150505050565b604a5490565b6134aa3361428c565b6134e9576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c56833981519152604482015290519081900360640190fd5b603a54610100900460ff1661353d576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61359e603980548060200260200160405190810160405280929190818152602001828054801561139b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161137d575050505050613834565b81146135db5760405162461bcd60e51b8152600401808060200182810382526023815260200180615d346023913960400191505060405180910390fd5b60005b60395481101561377c5760366000603983815481106135f957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615613774576000603660006039848154811061363957fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091555b60375461367d9060016150ce565b811015613745576039828154811061369157fe5b600091825260209091200154603780546001600160a01b0390921691839081106136b757fe5b6000918252602090912001546001600160a01b0316141561373d576037805460001981019081106136e457fe5b600091825260209091200154603780546001600160a01b03909216918390811061370a57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613745565b60010161366f565b50603780548061375157fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b6001016135de565b507fd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b33603960405180836001600160a01b031681526020018060200182810382528381815481526020019150805480156137ff57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116137e1575b5050935050505060405180910390a161381a60396000615b22565b50603a805461ff0019169055565b60435490565b604c5481565b60008160405160200180828051906020019060200280838360005b8381101561386757818101518382015260200161384f565b50505050905001915050604051602081830303815290604052805190602001209050919050565b6138973361420f565b806138a657506138a63361428c565b6138f0576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b603a54610100900460ff16613944576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6139a5603980548060200260200160405190810160405280929190818152602001828054801561139b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161137d575050505050613834565b81146139e25760405162461bcd60e51b8152600401808060200182810382526023815260200180615d346023913960400191505060405180910390fd5b6139ee60396000615b22565b603a805461ff0019169055604080513381526020810183905281517f13c935eb475aa0f6e931fece83e2ac44569ce2d53460d29a6dedab40b965c8a3929181900390910190a150565b60378181548110613a4457fe5b6000918252602090912001546001600160a01b0316905081565b60475490565b603a54610100900460ff1681565b60345490565b8080613ab5576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b613abe3361420f565b80613acd5750613acd3361428c565b613b17576040805162461bcd60e51b815260206004820152601660248201527537b7363c9037bbb732b93e3e31b7b73a3937b63632b960511b604482015290519081900360640190fd5b814711613b64576040805162461bcd60e51b815260206004820152601660248201527518985b185b98d9481b9bdd081cdd59999a58da595b9d60521b604482015290519081900360640190fd5b613b6f6040836145ac565b613b77612e3b565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015613baf573d6000803e3d6000fd5b507f611b7c0d84fda988026215bef9b3e4d81cbceced7e679be6d5e044b588467c0e33613bda612e3b565b604080516001600160a01b03938416815291909216602082015280820185905290519081900360600190a15050565b613c123361428c565b613c51576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c56833981519152604482015290519081900360640190fd5b611a50603b826153c8565b6000613c66615418565b6001600160a01b0316836001600160a01b03161415613c865750806114c0565b816001600160a01b03841615613d45576000806000613ca48761516a565b5050509350935093505080613cf6576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b81613d31576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b613d3f836132e388856152f3565b93505050505b6000806000613d5261548e565b5050509350935093505080613da4576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b81613dea576040805162461bcd60e51b81526020600482015260116024820152700737461626c65636f696e20726174653d3607c1b604482015290519081900360640190fd5b613df8826132e386866152f3565b979650505050505050565b613e0c3361428c565b613e4b576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c56833981519152604482015290519081900360640190fd5b6119b06047826153c8565b613e5f3361428c565b613e9e576040805162461bcd60e51b815260206004820152601a6024820152600080516020615c56833981519152604482015290519081900360640190fd5b6112536040826153c8565b613eb23361420f565b80613ebc57503330145b613f00576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b93e3e39b2b63360811b604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b815181101561400f57613f4c828281518110612c0257fe5b15613f97576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110613fae57fe5b60200260200101516001600160a01b03161415614007576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101613f34565b50603a5462010000900460ff1615614066576040805162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081a5b9a5d1a585b1a5e9959605a1b604482015290519081900360640190fd5b60005b82811015614157576036600085858481811061408157fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff1661414f576001603660008686858181106140bd57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550603784848381811061411257fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055505b600101614069565b50603a805462ff0000191662010000179055604080513380825260208201838152603780549484018590527fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a94929390929091906060830190849080156141e757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116141c9575b5050935050505060405180910390a1505050565b60445460ff1690565b60006114c0826155fd565b6035546001600160a01b0390811691161490565b600482015460ff1615614271576040805162461bcd60e51b81526020600482015260116024820152701b1a5b5a5d08185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b61427b828261568e565b50600401805460ff19166001179055565b600061429960345461461c565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156142e557600080fd5b505afa1580156142f9573d6000803e3d6000fd5b505050506040513d602081101561430f57600080fd5b505192915050565b6000815160411461436f576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156143e05760405162461bcd60e51b8152600401808060200182810382526022815260200180615c346022913960400191505060405180910390fd5b8060ff16601b141580156143f857508060ff16601c14155b156144345760405162461bcd60e51b8152600401808060200182810382526022815260200180615c766022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614490573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166144f8576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b60028101546000906145179062015180615110565b42111561452657508054611180565b506001810154611180565b600482015460ff1661458a576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974206861736e2774206265656e207365742079657400000000000000604482015290519081900360640190fd5b600390910155565b60008061459e8361516a565b509098975050505050505050565b6145b5826156b1565b8082600101541015614601576040805162461bcd60e51b815260206004820152601060248201526f185d985a5b18589b194f185b5bdd5b9d60821b604482015290519081900360640190fd5b600182015461461090826150ce565b82600101819055505050565b6033546000906001600160a01b031661467c576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156146c857600080fd5b505afa1580156146dc573d6000803e3d6000fd5b505050506040513d60208110156146f257600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156142e557600080fd5b8015806147c3575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561479557600080fd5b505afa1580156147a9573d6000803e3d6000fd5b505050506040513d60208110156147bf57600080fd5b5051155b6147fe5760405162461bcd60e51b8152600401808060200182810382526036815260200180615d576036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052614850908490614976565b505050565b3b151590565b6000806148678361516a565b509198975050505050505050565b60008061488360455461461c565b6001600160a01b031663afc72e9385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156148ee5781810151838201526020016148d6565b50505050905090810190601f16801561491b5780820380516001836020036101000a031916815260200191505b509350505050604080518083038186803b15801561493857600080fd5b505afa15801561494c573d6000803e3d6000fd5b505050506040513d604081101561496257600080fd5b508051602090910151909590945092505050565b60606149cb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166157039092919063ffffffff16565b805190915015614850578080602001905160208110156149ea57600080fd5b50516148505760405162461bcd60e51b815260040180806020018281038252602a815260200180615d0a602a913960400191505060405180910390fd5b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b604c80546001019081905560408051338152602081019290925280517fab0423a75986556234aecd171c46ce7f5e45607d8070bf5230f2735b50322bff9281900390910190a1565b303b1590565b600054610100900460ff1680614adf5750614adf614ac0565b80614aed575060005460ff16155b614b285760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff16158015614b53576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821615614b7e57603380546001600160a01b0319166001600160a01b0384161790555b8015614b90576000805461ff00191690555b5050565b600054610100900460ff1680614bad5750614bad614ac0565b80614bbb575060005460ff16155b614bf65760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff16158015614c21576000805460ff1961ff0019909116610100171660011790555b8115614b7e5760348290558015614b90576000805461ff00191690555050565b600054610100900460ff1680614c5a5750614c5a614ac0565b80614c68575060005460ff16155b614ca35760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff16158015614cce576000805460ff1961ff0019909116610100171660011790555b603580546001600160a01b0319166001600160a01b0385161760ff60a01b1916600160a01b8415158102919091179182905560ff910416614d4657604080516001600160a01b038516815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b60408051600081526001600160a01b038516602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a18015614850576000805461ff0019169055505050565b600054610100900460ff1680614db95750614db9614ac0565b80614dc7575060005460ff16155b614e025760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff16158015614e2d576000805460ff1961ff0019909116610100171660011790555b6040805160a08101825283815260208101849052429181018290526000606082018190526080909101819052603b849055603c849055603d91909155603e55603f805460ff191690558015614b90576000805461ff00191690555050565b600054610100900460ff1680614ea45750614ea4614ac0565b80614eb2575060005460ff16155b614eed5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff16158015614f18576000805460ff1961ff0019909116610100171660011790555b6040805160a0810182526706f05b59d3b2000080825260208201819052428284018190526000606084018190526080909301839052928190556041556042919091556043556044805460ff191690558015614f79576000805461ff00191690555b50565b600054610100900460ff1680614f955750614f95614ac0565b80614fa3575060005460ff16155b614fde5760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff16158015615009576000805460ff1961ff0019909116610100171660011790555b61501282615712565b600061501c61548e565b505050505091505060008111615069576040805162461bcd60e51b815260206004820152600d60248201526c37379039ba30b13632b1b7b4b760991b604482015290519081900360640190fd5b6127100260468190556040805160a081018252828152602081018390524291810182905260006060820181905260809091018190526047839055604892909255604955604a55604b805460ff191690558015614b90576000805461ff00191690555050565b6000611f5a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506157bf565b600082820183811015611f5a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b606060008060008060008061518060455461461c565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b1580156151cc57600080fd5b505afa1580156151e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561520957600080fd5b8101908080516040519392919084600160201b82111561522857600080fd5b90830190602082018581111561523d57600080fd5b8251600160201b81118282018810171561525657600080fd5b82525081516020918201929091019080838360005b8381101561528357818101518382015260200161526b565b50505050905090810190601f1680156152b05780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b600082615302575060006114c0565b8282028284828161530f57fe5b0414611f5a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615c986021913960400191505060405180910390fd5b6000611f5a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615819565b6001600160a01b0382166153b4576153af6001600160a01b0384168261587e565b614850565b6148506001600160a01b0383168483615963565b8082600301541461540a5760405162461bcd60e51b8152600401808060200182810382526022815260200180615bd86022913960400191505060405180910390fd5b614b9082836003015461568e565b600061542560455461461c565b6001600160a01b031663e9cbd8226040518163ffffffff1660e01b815260040160206040518083038186803b15801561545d57600080fd5b505afa158015615471573d6000803e3d6000fd5b505050506040513d602081101561548757600080fd5b5051905090565b60606000806000806000806154a460455461461c565b6001600160a01b0316633efec5e96040518163ffffffff1660e01b815260040160006040518083038186803b1580156154dc57600080fd5b505afa1580156154f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e081101561551957600080fd5b8101908080516040519392919084600160201b82111561553857600080fd5b90830190602082018581111561554d57600080fd5b8251600160201b81118282018810171561556657600080fd5b82525081516020918201929091019080838360005b8381101561559357818101518382015260200161557b565b50505050905090810190601f1680156155c05780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979f939e50919c509a5098509096509294509192505050565b60006001600160a01b0382161561568757604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561565457600080fd5b505afa158015615668573d6000803e3d6000fd5b505050506040513d602081101561567e57600080fd5b50519050611180565b5047611180565b615697826156b1565b8082556001820154811015614b9057815460018301555050565b60028101546156c39062015180615110565b421115614f7957426002820155805460018201556040517fe93bc25276d408d390778e7a8b926f2f67209c43ed540081b951fe128f0d3cd290600090a150565b60606115a684846000856159b5565b600054610100900460ff168061572b575061572b614ac0565b80615739575060005460ff16155b6157745760405162461bcd60e51b815260040180806020018281038252602e815260200180615cb9602e913960400191505060405180910390fd5b600054610100900460ff1615801561579f576000805460ff1961ff0019909116610100171660011790555b8115614b7e5760458290558015614b90576000805461ff00191690555050565b600081848411156158115760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e01578181015183820152602001611de9565b505050900390565b600081836158685760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e01578181015183820152602001611de9565b50600083858161587457fe5b0495945050505050565b804710156158d3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461591e576040519150601f19603f3d011682016040523d82523d6000602084013e615923565b606091505b50509050806148505760405162461bcd60e51b815260040180806020018281038252603a815260200180615bfa603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052614850908490614976565b60606159c085614855565b615a11576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310615a505780518252601f199092019160209182019101615a31565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615ab2576040519150601f19603f3d011682016040523d82523d6000602084013e615ab7565b606091505b50915091508115615acb5791506115a69050565b805115615adb5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611e01578181015183820152602001611de9565b5080546000825590600052602060002090810190614f799190615ba3565b828054828255906000526020600020908101928215615b93579160200282015b82811115615b935781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190615b60565b50615b9f929150615bb8565b5090565b5b80821115615b9f5760008155600101615ba4565b5b80821115615b9f5780546001600160a01b0319168155600101615bb956fe636f6e6669726d65642f7375626d6974746564206c696d6974206d69736d61746368416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656445434453413a20696e76616c6964207369676e6174757265202773272076616c756573656e646572206973206e6f74206120636f6e74726f6c6c657200000000000045434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65646f776e65722063616e6e6f742062652073657420746f207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646e6f6e2d6d61746368696e672070656e64696e672077686974656c69737420686173685361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220cd34186453acac978f0828bff119ff5fd479d00c4f76950fa843e140410693ef64736f6c634300060c0033" +var WalletBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d396603c5534801561007957600080fd5b506159fe806200008a6000396000f3fe6080604052600436106102ae5760003560e01c80637b580e7511610175578063cbd2ac68116100dc578063d251fefc11610095578063e61c51ca1161006f578063e61c51ca14610eae578063f36febda14610ed8578063f421764814610f11578063f8b2cb4f14610f8c576102ae565b8063d251fefc14610e5a578063de212bf314610e84578063e2b4ce9714610e99576102ae565b8063cbd2ac6814610d19578063cccdc55614610d43578063cd7958dd14610d58578063ce0b5bd514610e06578063ced99cce14610e30578063cf0a866b14610e45576102ae565b8063aaf1fc621161012e578063aaf1fc6214610aee578063ad95580b14610b9f578063b242e53414610bb4578063be40ba7914610bef578063beabacc814610c04578063c1e559a314610c47576102ae565b80637b580e75146109ec5780637d73b23114610a1f5780637fd004fa14610a34578063877337b014610aaf5780638da5cb5b14610ac457806390e690c714610ad9576102ae565b8063458d07f2116102195780635adc02ab116101d25780635adc02ab146108985780636137d670146108c257806369efdfc01461093d5780636c37a7e614610998578063715018a6146109c2578063747c31d6146109d7576102ae565b8063458d07f21461072c57806345b12efc1461075657806346efe0ed1461076b57806347b55a9d1461083d57806347d125af146108525780634d9aa24814610883576102ae565b806326d05ab21161026b57806326d05ab214610566578063294f40251461057b57806332531c3c146105e05780633a43199f146106135780633b8252fa1461063f5780633f579f4214610666576102ae565b806301ffc9a7146102b3578063100f23fd146102fb5780631127b57e146103275780631626ba7e146103b157806320c13b0b146104865780632121dc7514610551575b600080fd5b3480156102bf57600080fd5b506102e7600480360360208110156102d657600080fd5b50356001600160e01b031916610fbf565b604080519115158252519081900360200190f35b34801561030757600080fd5b506103256004803603602081101561031e57600080fd5b5035610fd9565b005b34801561033357600080fd5b5061033c611179565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037657818101518382015260200161035e565b50505050905090810190601f1680156103a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bd57600080fd5b50610469600480360360408110156103d457600080fd5b81359190810190604081016020820135600160201b8111156103f557600080fd5b82018360208201111561040757600080fd5b803590602001918460018302840111600160201b8311171561042857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061119a945050505050565b604080516001600160e01b03199092168252519081900360200190f35b34801561049257600080fd5b50610469600480360360408110156104a957600080fd5b810190602081018135600160201b8111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460018302840111600160201b831117156104f657600080fd5b919390929091602081019035600160201b81111561051357600080fd5b82018360208201111561052557600080fd5b803590602001918460018302840111600160201b8311171561054657600080fd5b509092509050611209565b34801561055d57600080fd5b506102e76112e0565b34801561057257600080fd5b506102e76112f1565b34801561058757600080fd5b506105906112fa565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105cc5781810151838201526020016105b4565b505050509050019250505060405180910390f35b3480156105ec57600080fd5b506102e76004803603602081101561060357600080fd5b50356001600160a01b031661135c565b6103256004803603604081101561062957600080fd5b506001600160a01b038135169060200135611371565b34801561064b57600080fd5b50610654611582565b60408051918252519081900360200190f35b34801561067257600080fd5b5061033c6004803603606081101561068957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156106b857600080fd5b8201836020820111156106ca57600080fd5b803590602001918460018302840111600160201b831117156106eb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611588945050505050565b34801561073857600080fd5b506103256004803603602081101561074f57600080fd5b5035611a80565b34801561076257600080fd5b50610654611b67565b34801561077757600080fd5b506103256004803603606081101561078e57600080fd5b81359190810190604081016020820135600160201b8111156107af57600080fd5b8201836020820111156107c157600080fd5b803590602001918460018302840111600160201b831117156107e257600080fd5b919390929091602081019035600160201b8111156107ff57600080fd5b82018360208201111561081157600080fd5b803590602001918460018302840111600160201b8311171561083257600080fd5b509092509050611b85565b34801561084957600080fd5b50610590611bf5565b34801561085e57600080fd5b50610867611c55565b604080516001600160a01b039092168252519081900360200190f35b34801561088f57600080fd5b50610654611c64565b3480156108a457600080fd5b50610325600480360360208110156108bb57600080fd5b5035611c6a565b3480156108ce57600080fd5b50610325600480360360208110156108e557600080fd5b810190602081018135600160201b8111156108ff57600080fd5b82018360208201111561091157600080fd5b803590602001918460208302840111600160201b8311171561093257600080fd5b509092509050611f91565b34801561094957600080fd5b50610325600480360360e081101561096057600080fd5b506001600160a01b03813581169160208101351515916040820135169060608101359060808101359060a08101359060c001356121b8565b3480156109a457600080fd5b50610325600480360360208110156109bb57600080fd5b5035612294565b3480156109ce57600080fd5b50610325612408565b3480156109e357600080fd5b50610654612503565b3480156109f857600080fd5b5061032560048036036020811015610a0f57600080fd5b50356001600160a01b0316612509565b348015610a2b57600080fd5b506108676126d4565b348015610a4057600080fd5b5061032560048036036020811015610a5757600080fd5b810190602081018135600160201b811115610a7157600080fd5b820183602082011115610a8357600080fd5b803590602001918460208302840111600160201b83111715610aa457600080fd5b5090925090506126e3565b348015610abb57600080fd5b50610654612a26565b348015610ad057600080fd5b50610867612a2c565b348015610ae557600080fd5b50610325612a3b565b348015610afa57600080fd5b5061032560048036036020811015610b1157600080fd5b810190602081018135600160201b811115610b2b57600080fd5b820183602082011115610b3d57600080fd5b803590602001918460018302840111600160201b83111715610b5e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a95945050505050565b348015610bab57600080fd5b50610325612bbc565b348015610bc057600080fd5b5061032560048036036040811015610bd757600080fd5b506001600160a01b0381351690602001351515612cc3565b348015610bfb57600080fd5b506102e7612e7a565b348015610c1057600080fd5b5061032560048036036060811015610c2757600080fd5b506001600160a01b03813581169160208101359091169060400135612e89565b348015610c5357600080fd5b5061032560048036036060811015610c6a57600080fd5b81359190810190604081016020820135600160201b811115610c8b57600080fd5b820183602082011115610c9d57600080fd5b803590602001918460018302840111600160201b83111715610cbe57600080fd5b919390929091602081019035600160201b811115610cdb57600080fd5b820183602082011115610ced57600080fd5b803590602001918460018302840111600160201b83111715610d0e57600080fd5b509092509050613006565b348015610d2557600080fd5b5061032560048036036020811015610d3c57600080fd5b50356130bd565b348015610d4f57600080fd5b506106546134a4565b348015610d6457600080fd5b5061065460048036036020811015610d7b57600080fd5b810190602081018135600160201b811115610d9557600080fd5b820183602082011115610da757600080fd5b803590602001918460208302840111600160201b83111715610dc857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506134aa945050505050565b348015610e1257600080fd5b5061032560048036036020811015610e2957600080fd5b5035613504565b348015610e3c57600080fd5b506102e76136a8565b348015610e5157600080fd5b506102e76136b8565b348015610e6657600080fd5b5061086760048036036020811015610e7d57600080fd5b50356136c8565b348015610e9057600080fd5b506102e76136ef565b348015610ea557600080fd5b506106546136fd565b348015610eba57600080fd5b5061032560048036036020811015610ed157600080fd5b5035613703565b348015610ee457600080fd5b5061065460048036036040811015610efb57600080fd5b506001600160a01b03813516906020013561388f565b348015610f1d57600080fd5b5061032560048036036020811015610f3457600080fd5b810190602081018135600160201b811115610f4e57600080fd5b820183602082011115610f6057600080fd5b803590602001918460208302840111600160201b83111715610f8157600080fd5b509092509050613a06565b348015610f9857600080fd5b5061065460048036036020811015610faf57600080fd5b50356001600160a01b0316613d59565b6001600160e01b031981166301ffc9a760e01b145b919050565b610fe233613d64565b80610ff15750610ff133613d78565b611036576040805162461bcd60e51b81526020600482015260116024820152706f6e6c79206f776e6572206f722032464160781b604482015290519081900360640190fd5b603b5460ff16611085576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b6110e860398054806020026020016040519081016040528092919081815260200182805480156110de57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110c0575b50505050506134aa565b81146111255760405162461bcd60e51b81526004018080602001828103825260238152602001806159706023913960400191505060405180910390fd5b611131603960006156f1565b603b805460ff19169055604080513381526020810183905281517f7794eff834d760583543e6e510e717a5e66d2c064e225f4db448343c3e66afcf929181900390910190a150565b60405180604001604052806005815260200164332e342e3160d81b81525081565b6000806111a78484613db4565b90506111b281613d64565b6111f7576040805162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b50630b135d3f60e11b90505b92915050565b6000808585604051602001808383808284376040805191909301818103601f190182528084528151602092830120601f8b01839004830282018301909452898152929650630b135d3f60e11b9550611280945086935089915088908190840183828082843760009201919091525061119a92505050565b6001600160e01b031916146112cc576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b506320c13b0b60e01b90505b949350505050565b603554600160a01b900460ff165b90565b603b5460ff1681565b6060603a80548060200260200160405190810160405280929190818152602001828054801561135257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611334575b5050505050905090565b60376020526000908152604090205460ff1681565b61137a33613d64565b8061138457503330145b6113c9576040805162461bcd60e51b81526020600482015260116024820152702737ba1037bbb732b91037b91039b2b63360791b604482015290519081900360640190fd5b6113d282613f9f565b611418576040805162461bcd60e51b8152602060048201526012602482015271746f6b656e206e6f74206c6f616461626c6560701b604482015290519081900360640190fd5b6114228282613fb9565b600061142f604254614065565b90506001600160a01b038316156114c8576114546001600160a01b03841682846141b8565b806001600160a01b0316631b3c96b484846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b50505050611539565b806001600160a01b0316631b3c96b48385856040518463ffffffff1660e01b815260040180836001600160a01b03168152602001828152602001925050506000604051808303818588803b15801561151f57600080fd5b505af1158015611533573d6000803e3d6000fd5b50505050505b604080516001600160a01b03851681526020810184905281517f5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a929181900390910190a1505050565b603f5490565b606061159333613d64565b806115a257506115a233613d78565b6115e7576040805162461bcd60e51b81526020600482015260116024820152706f6e6c79206f776e6572206f722032464160781b604482015290519081900360640190fd5b6001600160a01b03841660009081526037602052604090205460ff1615801561161a5750603554600160a81b900460ff16155b1561162a5761162a600084613fb9565b61163c846001600160a01b03166142d0565b801561164c575061164c846142d6565b156118255760008061165e86856142f0565b6001600160a01b038216600090815260376020526040902054919350915060ff161580156116965750603554600160a81b900460ff16155b156116a5576116a58682613fb9565b6116b86001600160a01b038716856143f1565b604080516020808252818301909252606091602082018180368337019050509050600160f81b81601f815181106116eb57fe5b60200101906001600160f81b031916908160001a9053507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138787878460405180856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561177d578181015183820152602001611765565b50505050905090810190601f1680156117aa5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156117dd5781810151838201526020016117c5565b50505050905090810190601f16801561180a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a19250611a79915050565b60006060856001600160a01b031685856040518082805190602001908083835b602083106118645780518252601f199092019160209182019101611845565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146118c6576040519150601f19603f3d011682016040523d82523d6000602084013e6118cb565b606091505b509150915081819061195b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611920578181015183820152602001611908565b50505050905090810190601f16801561194d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507ff77753fab406ecfff96d6ff2476c64a838fa9f6d37b1bf190f8546e395e3b6138686868460405180856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156119d75781810151838201526020016119bf565b50505050905090810190601f168015611a045780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611a37578181015183820152602001611a1f565b50505050905090810190601f168015611a645780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a19150505b9392505050565b611a8933613d64565b80611a9357503330145b611ad8576040805162461bcd60e51b81526020600482015260116024820152702737ba1037bbb732b91037b91039b2b63360791b604482015290519081900360640190fd5b603f819055603d548111611b3057603e54811015611b2257603e8190556040805481518381526020810191909152815160008051602061586d833981519152929181900390910190a15b611b2b816144a2565b611b64565b6040805182815290517f065b9ade648867cf901516060dd7a78fad8ab1aec5eb80ee57acbb30badf86ec9181900360200190a15b50565b6000604054421115611b7c5750603d546112ee565b50603e546112ee565b611b8e336144e5565b611bdf576040805162461bcd60e51b815260206004820152601860248201527f73656e646572206973206e6f7420636f6e74726f6c6c65720000000000000000604482015290519081900360640190fd5b611bee8585858585600061453e565b5050505050565b60606039805480602002602001604051908101604052809291908181526020018280548015611352576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611334575050505050905090565b6036546001600160a01b031681565b603d5490565b603554600160b01b900460ff1615611cc957611c85336144e5565b611cc4576040805162461bcd60e51b815260206004820152601c60248201526000805160206157cf833981519152604482015290519081900360640190fd5b611d12565b6036546001600160a01b03163314611d125760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b603b5460ff16611d61576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b611dc260398054806020026020016040519081016040528092919081815260200182805480156110de576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116110c05750505050506134aa565b8114611dff5760405162461bcd60e51b81526004018080602001828103825260238152602001806159706023913960400191505060405180910390fd5b60005b603954811015611ee6576037600060398381548110611e1d57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16611ede5760016037600060398481548110611e5c57fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055603980546038919083908110611ea257fe5b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b600101611e02565b507fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a33603960405180836001600160a01b03168152602001806020018281038252838181548152602001915080548015611f6957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f4b575b5050935050505060405180910390a1611f84603960006156f1565b50603b805460ff19169055565b611f9a33613d64565b80611fa457503330145b611fe9576040805162461bcd60e51b81526020600482015260116024820152702737ba1037bbb732b91037b91039b2b63360791b604482015290519081900360640190fd5b603b5460ff161580156120045750603b54610100900460ff16155b612055576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c697374207375626d697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b603b5462010000900460ff166120ae576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b806120f2576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b6120fe603a838361570f565b50603b805461ff00191661010017905560408051602080840282810182019093528382527ffbc0e5ca6c7e4858daf0fdb185ef5186203e74ec9c64737e93c0aeaec596e1d1928592859261216d928591859182918501908490808284376000920191909152506134aa92505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a15050565b600054610100900460ff16806121d157506121d1614786565b806121df575060005460ff16155b61221a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff16158015612245576000805460ff1961ff0019909116610100171660011790555b61224d61478c565b61225686614840565b61225f8461490e565b61226988886149bb565b6122738286614b1a565b6042839055801561228a576000805461ff00191690555b5050505050505050565b603554600160b01b900460ff16156122f3576122af336144e5565b6122ee576040805162461bcd60e51b815260206004820152601c60248201526000805160206157cf833981519152604482015290519081900360640190fd5b61233c565b6036546001600160a01b0316331461233c5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b80603f541461237c5760405162461bcd60e51b81526004018080602001828103825260258152602001806158fe6025913960400191505060405180910390fd5b603d5481116123bc5760405162461bcd60e51b81526004018080602001828103825260288152602001806157a76028913960400191505060405180910390fd5b603e8190556123ce4262015180614c7c565b6040818155603e5481519081526020810192909252805160008051602061586d8339815191529281900390910190a1611b64603f546144a2565b61241133613d64565b612458576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b603554600160a01b900460ff166124b6576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b603580546001600160a01b0319169055604080516000808252602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a1565b60425490565b61251233613d64565b612559576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b6001600160a01b0381166125b4576040805162461bcd60e51b815260206004820152601960248201527f3246412063616e6e6f742062652073657420746f207a65726f00000000000000604482015290519081900360640190fd5b6036546001600160a01b038281169116141561260d576040805162461bcd60e51b81526020600482015260136024820152721859191c995cdcc8185b1c9958591e481cd95d606a1b604482015290519081900360640190fd5b6001600160a01b03811630141561266b576040805162461bcd60e51b815260206004820181905260248201527f3246412063616e6e6f74206265207468652077616c6c65742061646472657373604482015290519081900360640190fd5b603680546001600160a01b0319166001600160a01b0383169081179091556035805460ff60b01b1916905560408051338152602081019290925280517f33635a1d7938fa110d60d48b4ecbefc4afcc07e782ca013f11de948ee7949d1c9281900390910190a150565b6033546001600160a01b031690565b6126ec33613d64565b806126f657503330145b61273b576040805162461bcd60e51b81526020600482015260116024820152702737ba1037bbb732b91037b91039b2b63360791b604482015290519081900360640190fd5b603b5460ff161580156127565750603b54610100900460ff16155b6127a7576040805162461bcd60e51b815260206004820152601c60248201527f77686974656c697374207375626d697373696f6e2070656e64696e6700000000604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b81518110156128c3576128008282815181106127f357fe5b6020026020010151613d64565b1561284b576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b031682828151811061286257fe5b60200260200101516001600160a01b031614156128bb576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b6001016127db565b50603b5462010000900460ff1661291d576040805162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd081b9bdd081a5b9a5d1a585b1a5e9959603a1b604482015290519081900360640190fd5b81612961576040805162461bcd60e51b815260206004820152600f60248201526e195b5c1d1e481dda1a5d195b1a5cdd608a1b604482015290519081900360640190fd5b61296d6039848461570f565b50603b805460ff1916600117905560408051602080850282810182019093528482527f9c80b3b5f68b3e017766d59e8d09b34efe6462b05c398f35cab9e271d9bc3b9c92869286926129da928591859182918501908490808284376000920191909152506134aa92505050565b60405180806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b603c5490565b6035546001600160a01b031690565b612a4433613d64565b612a8b576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b612a93614cd6565b565b612a9e33613d64565b80612aad5750612aad33613d78565b612af2576040805162461bcd60e51b81526020600482015260116024820152706f6e6c79206f776e6572206f722032464160781b604482015290519081900360640190fd5b8051602080820191906000808060605b8685101561228a57612b15866054614d1e565b888601805160148201516034909201805193995060609190911c96509094509092509050612b4e6054612b488785614c7c565b90614c7c565b945086851115612b95576040805162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b604482015290519081900360640190fd5b81612bab57506040805160208101909152600081525b612bb6848483611588565b50612b02565b612bc533613d64565b612c0c576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b603554600160b01b900460ff1615612c6b576040805162461bcd60e51b815260206004820152601b60248201527f6d6f6e6f6c69746832464120616c726561647920656e61626c65640000000000604482015290519081900360640190fd5b6035805460ff60b01b1916600160b01b179055603680546001600160a01b03191690556040805133815290517fea0cce48757f6b222f91e711f59a5a8ec05a3ed3c0a4328fe36cb48f31a869699181900360200190a1565b612ccc33613d64565b612d13576040805162461bcd60e51b815260206004820152601360248201527239b2b73232b91034b9903737ba1037bbb732b960691b604482015290519081900360640190fd5b603554600160a01b900460ff16612d71576040805162461bcd60e51b815260206004820152601d60248201527f6f776e657273686970206973206e6f74207472616e7366657261626c65000000604482015290519081900360640190fd5b6001600160a01b038216612db65760405162461bcd60e51b81526004018080602001828103825260238152602001806159236023913960400191505060405180910390fd5b6035805460ff60a01b1916600160a01b8315150217905580612e0f57604080516001600160a01b038416815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b603554604080516001600160a01b039283168152918416602083015280517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea59281900390910190a150603580546001600160a01b0319166001600160a01b0392909216919091179055565b603b5462010000900460ff1681565b612e9233613d64565b80612e9c57503330145b612ee1576040805162461bcd60e51b81526020600482015260116024820152702737ba1037bbb732b91037b91039b2b63360791b604482015290519081900360640190fd5b8080612f1e576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b6001600160a01b038416612f69576040805162461bcd60e51b815260206004820152600d60248201526c064657374696e6174696f6e3d3609c1b604482015290519081900360640190fd5b6001600160a01b03841660009081526037602052604090205460ff16158015612f9c5750603554600160a81b900460ff16155b15612fab57612fab8383613fb9565b612fb6848484614d60565b604080516001600160a01b0380871682528516602082015280820184905290517fd1ba4ac2e2a11b5101f6cb4d978f514a155b421e8ec396d2d9abaf0bb02917ee9181900360600190a150505050565b603554600160b01b900460ff161561306557613021336144e5565b613060576040805162461bcd60e51b815260206004820152601c60248201526000805160206157cf833981519152604482015290519081900360640190fd5b6130ae565b6036546001600160a01b031633146130ae5760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b611bee8585858585600161453e565b603554600160b01b900460ff161561311c576130d8336144e5565b613117576040805162461bcd60e51b815260206004820152601c60248201526000805160206157cf833981519152604482015290519081900360640190fd5b613165565b6036546001600160a01b031633146131655760405162461bcd60e51b81526004018080602001828103825260228152602001806157ef6022913960400191505060405180910390fd5b603b54610100900460ff166131b9576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b61321a603a8054806020026020016040519081016040528092919081815260200182805480156110de576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116110c05750505050506134aa565b81146132575760405162461bcd60e51b81526004018080602001828103825260238152602001806159706023913960400191505060405180910390fd5b60005b603a548110156133f85760376000603a838154811061327557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156133f057600060376000603a84815481106132b557fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091555b6038546132f9906001614d1e565b8110156133c157603a828154811061330d57fe5b600091825260209091200154603880546001600160a01b03909216918390811061333357fe5b6000918252602090912001546001600160a01b031614156133b95760388054600019810190811061336057fe5b600091825260209091200154603880546001600160a01b03909216918390811061338657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506133c1565b6001016132eb565b5060388054806133cd57fe5b600082815260209020810160001990810180546001600160a01b03191690550190555b60010161325a565b507fd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b33603a60405180836001600160a01b0316815260200180602001828103825283818154815260200191508054801561347b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161345d575b5050935050505060405180910390a1613496603a60006156f1565b50603b805461ff0019169055565b60415481565b60008160405160200180828051906020019060200280838360005b838110156134dd5781810151838201526020016134c5565b50505050905001915050604051602081830303815290604052805190602001209050919050565b61350d33613d64565b8061351c575061351c33613d78565b613561576040805162461bcd60e51b81526020600482015260116024820152706f6e6c79206f776e6572206f722032464160781b604482015290519081900360640190fd5b603b54610100900460ff166135b5576040805162461bcd60e51b81526020600482015260156024820152743737903832b73234b7339039bab136b4b9b9b4b7b760591b604482015290519081900360640190fd5b613616603a8054806020026020016040519081016040528092919081815260200182805480156110de576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116110c05750505050506134aa565b81146136535760405162461bcd60e51b81526004018080602001828103825260238152602001806159706023913960400191505060405180910390fd5b61365f603a60006156f1565b603b805461ff0019169055604080513381526020810183905281517f13c935eb475aa0f6e931fece83e2ac44569ce2d53460d29a6dedab40b965c8a3929181900390910190a150565b603554600160a81b900460ff1681565b603554600160b01b900460ff1681565b603881815481106136d557fe5b6000918252602090912001546001600160a01b0316905081565b603b54610100900460ff1681565b60345490565b8080613740576040805162461bcd60e51b8152602060048201526007602482015266076616c75653d360cc1b604482015290519081900360640190fd5b61374933613d64565b80613758575061375833613d78565b61379d576040805162461bcd60e51b81526020600482015260116024820152706f6e6c79206f776e6572206f722032464160781b604482015290519081900360640190fd5b8147116137ea576040805162461bcd60e51b815260206004820152601660248201527518985b185b98d9481b9bdd081cdd59999a58da595b9d60521b604482015290519081900360640190fd5b6137f5600083613fb9565b6137fd612a2c565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015613835573d6000803e3d6000fd5b507f611b7c0d84fda988026215bef9b3e4d81cbceced7e679be6d5e044b588467c0e33613860612a2c565b604080516001600160a01b03938416815291909216602082015280820185905290519081900360600190a15050565b6000613899614d9a565b6001600160a01b0316836001600160a01b031614156138b9575080611203565b816001600160a01b038416156139485760008060006138d787614e10565b50505093509350935050806138f3576000945050505050611203565b8161392e576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b6139428361393c8885614f99565b90614ff2565b93505050505b6000806000613955615034565b50505093509350935050806139a7576040805162461bcd60e51b8152602060048201526013602482015272746f6b656e206e6f7420617661696c61626c6560681b604482015290519081900360640190fd5b816139ed576040805162461bcd60e51b81526020600482015260116024820152700737461626c65636f696e20726174653d3607c1b604482015290519081900360640190fd5b6139fb8261393c8686614f99565b979650505050505050565b613a0f33613d64565b80613a1957503330145b613a5e576040805162461bcd60e51b81526020600482015260116024820152702737ba1037bbb732b91037b91039b2b63360791b604482015290519081900360640190fd5b8181808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925050505b8151811015613b6d57613aaa8282815181106127f357fe5b15613af5576040805162461bcd60e51b8152602060048201526016602482015275636f6e7461696e73206f776e6572206164647265737360501b604482015290519081900360640190fd5b60006001600160a01b0316828281518110613b0c57fe5b60200260200101516001600160a01b03161415613b65576040805162461bcd60e51b8152602060048201526012602482015271636f6e7461696e732030206164647265737360701b604482015290519081900360640190fd5b600101613a92565b50603b5462010000900460ff1615613bc4576040805162461bcd60e51b81526020600482015260156024820152741dda1a5d195b1a5cdd081a5b9a5d1a585b1a5e9959605a1b604482015290519081900360640190fd5b60005b82811015613cb55760376000858584818110613bdf57fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff16613cad57600160376000868685818110613c1b57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506038848483818110613c7057fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055505b600101613bc7565b50603b805462ff0000191662010000179055604080513380825260208201838152603880549484018590527fb2f6cccee7a369e23e293c25aa19bef80af11eb26deba3ea0f2a02783f752e4a9492939092909190606083019084908015613d4557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613d27575b5050935050505060405180910390a1505050565b6000611203826151a3565b6035546001600160a01b0390811691161490565b603554600090600160b01b900460ff1615613d9d57613d96826144e5565b9050610fd4565b506036546001600160a01b03828116911614610fd4565b60008151604114613e0c576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613e7d5760405162461bcd60e51b815260040180806020018281038252602281526020018061584b6022913960400191505060405180910390fd5b8060ff16601b14158015613e9557508060ff16601c14155b15613ed15760405162461bcd60e51b815260040180806020018281038252602281526020018061588d6022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613f2d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613f95576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b600080613fab83614e10565b509098975050505050505050565b6000613fc5838361388f565b9050613fcf615234565b80603e541015614026576040805162461bcd60e51b815260206004820152601d60248201527f617661696c61626c6520736d616c6c6572207468616e20616d6f756e74000000604482015290519081900360640190fd5b603e546140339082614d1e565b603e8190556040805481519283526020830152805160008051602061586d8339815191529281900390910190a1505050565b6033546000906001600160a01b03166140c5576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b15801561411157600080fd5b505afa158015614125573d6000803e3d6000fd5b505050506040513d602081101561413b57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561418657600080fd5b505afa15801561419a573d6000803e3d6000fd5b505050506040513d60208110156141b057600080fd5b505192915050565b80158061423e575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561421057600080fd5b505afa158015614224573d6000803e3d6000fd5b505050506040513d602081101561423a57600080fd5b5051155b6142795760405162461bcd60e51b81526004018080602001828103825260368152602001806159936036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526142cb9084906143f1565b505050565b3b151590565b6000806142e283614e10565b509198975050505050505050565b6000806142fe603c54614065565b6001600160a01b031663afc72e9385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614369578181015183820152602001614351565b50505050905090810190601f1680156143965780820380516001836020036101000a031916815260200191505b509350505050604080518083038186803b1580156143b357600080fd5b505afa1580156143c7573d6000803e3d6000fd5b505050506040513d60408110156143dd57600080fd5b508051602090910151909590945092505050565b6060614446826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166152819092919063ffffffff16565b8051909150156142cb5780806020019051602081101561446557600080fd5b50516142cb5760405162461bcd60e51b815260040180806020018281038252602a815260200180615946602a913960400191505060405180910390fd5b603d819055604080513381526020810183905281517f2a843f39f13315c4c1a9bc53a1a32162858f272f3b2d0c656f409431251b6768929181900390910190a150565b60006144f2603454614065565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561418657600080fd5b600046905060006145b582308a8a8a60405160200180806836b7b737b634ba341d60b91b815250600901868152602001856001600160a01b031660601b8152601401848152602001838380828437808301925050509550505050505060405160208183030381529060405280519060200120615290565b9050631626ba7e60e01b6001600160e01b0319166146098287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061119a92505050565b6001600160e01b03191614614655576040805162461bcd60e51b815260206004820152600d60248201526c1cda59c81b9bdd081d985b1a59609a1b604482015290519081900360640190fd5b6041548814614697576040805162461bcd60e51b81526020600482015260096024820152687478207265706c617960b81b604482015290519081900360640190fd5b61469f614cd6565b6035805460ff60a81b1916600160a81b85151502179055604080516020601f89018190048102820181019092528781526146f3918990899081908401838280828437600092019190915250612a9592505050565b6035805460ff60a81b191690556040805184151591810191909152606080825281018790527f7126c7fa27a233346a02741f8f1389f231dcf840ff4f32bd9d506fe85cabc7ec908890889086908060208101608082018686808284376000838201819052601f909101601f1916909201948503909252835250506040805191829003019350915050a15050505050505050565b303b1590565b600054610100900460ff16806147a557506147a5614786565b806147b3575060005460ff16155b6147ee5760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff16158015614819576000805460ff1961ff0019909116610100171660011790555b6035805460ff60b01b1916600160b01b1790558015611b64576000805461ff001916905550565b600054610100900460ff16806148595750614859614786565b80614867575060005460ff16155b6148a25760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff161580156148cd576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156148f857603380546001600160a01b0319166001600160a01b0384161790555b801561490a576000805461ff00191690555b5050565b600054610100900460ff16806149275750614927614786565b80614935575060005460ff16155b6149705760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff1615801561499b576000805460ff1961ff0019909116610100171660011790555b81156148f8576034829055801561490a576000805461ff00191690555050565b600054610100900460ff16806149d457506149d4614786565b806149e2575060005460ff16155b614a1d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff16158015614a48576000805460ff1961ff0019909116610100171660011790555b603580546001600160a01b0319166001600160a01b0385161760ff60a01b1916600160a01b8415158102919091179182905560ff910416614ac057604080516001600160a01b038516815290517f808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec1229181900360200190a15b60408051600081526001600160a01b038516602082015281517f850b3df64837d7d518b45f5aa64d104652c3b80eb5b34a8e3d9eb666cb7cdea5929181900390910190a180156142cb576000805461ff0019169055505050565b600054610100900460ff1680614b335750614b33614786565b80614b41575060005460ff16155b614b7c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff16158015614ba7576000805460ff1961ff0019909116610100171660011790555b614bb0826152e1565b6000614bba615034565b505050505091505060008111614c07576040805162461bcd60e51b815260206004820152600d60248201526c37379039ba30b13632b1b7b4b760991b604482015290519081900360640190fd5b838102603d819055603e819055603f819055614c264262015180614c7c565b60408181558051838152602081019290925280517f47dcdfb9e867032608a011a7b2438466389c6eba4d51bf520b402083def29caa9281900390910190a1505080156142cb576000805461ff0019169055505050565b600082820183811015611a79576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604180546001019081905560408051338152602081019290925280517fab0423a75986556234aecd171c46ce7f5e45607d8070bf5230f2735b50322bff9281900390910190a1565b6000611a7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061538e565b6001600160a01b038216614d8657614d816001600160a01b038416826153e8565b6142cb565b6142cb6001600160a01b03831684836154cd565b6000614da7603c54614065565b6001600160a01b031663e9cbd8226040518163ffffffff1660e01b815260040160206040518083038186803b158015614ddf57600080fd5b505afa158015614df3573d6000803e3d6000fd5b505050506040513d6020811015614e0957600080fd5b5051905090565b6060600080600080600080614e26603c54614065565b6001600160a01b0316631f69565f896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b158015614e7257600080fd5b505afa158015614e86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e0811015614eaf57600080fd5b8101908080516040519392919084600160201b821115614ece57600080fd5b908301906020820185811115614ee357600080fd5b8251600160201b811182820188101715614efc57600080fd5b82525081516020918201929091019080838360005b83811015614f29578181015183820152602001614f11565b50505050905090810190601f168015614f565780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979e50929c50909a509850965094509192505050919395979092949650565b600082614fa857506000611203565b82820282848281614fb557fe5b0414611a795760405162461bcd60e51b81526004018080602001828103825260218152602001806158af6021913960400191505060405180910390fd5b6000611a7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061551f565b606060008060008060008061504a603c54614065565b6001600160a01b0316633efec5e96040518163ffffffff1660e01b815260040160006040518083038186803b15801561508257600080fd5b505afa158015615096573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260e08110156150bf57600080fd5b8101908080516040519392919084600160201b8211156150de57600080fd5b9083019060208201858111156150f357600080fd5b8251600160201b81118282018810171561510c57600080fd5b82525081516020918201929091019080838360005b83811015615139578181015183820152602001615121565b50505050905090810190601f1680156151665780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c090950151979f939e50919c509a5098509096509294509192505050565b60006001600160a01b0382161561522d57604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156151fa57600080fd5b505afa15801561520e573d6000803e3d6000fd5b505050506040513d602081101561522457600080fd5b50519050610fd4565b5047610fd4565b604054421115612a935761524b4262015180614c7c565b6040818155603d54603e81905581519081526020810192909252805160008051602061586d8339815191529281900390910190a1565b60606112d88484600085615584565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b600054610100900460ff16806152fa57506152fa614786565b80615308575060005460ff16155b6153435760405162461bcd60e51b815260040180806020018281038252602e8152602001806158d0602e913960400191505060405180910390fd5b600054610100900460ff1615801561536e576000805460ff1961ff0019909116610100171660011790555b81156148f857603c829055801561490a576000805461ff00191690555050565b600081848411156153e05760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611920578181015183820152602001611908565b505050900390565b8047101561543d576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114615488576040519150601f19603f3d011682016040523d82523d6000602084013e61548d565b606091505b50509050806142cb5760405162461bcd60e51b815260040180806020018281038252603a815260200180615811603a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526142cb9084906143f1565b6000818361556e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611920578181015183820152602001611908565b50600083858161557a57fe5b0495945050505050565b606061558f856142d0565b6155e0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061561f5780518252601f199092019160209182019101615600565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615681576040519150601f19603f3d011682016040523d82523d6000602084013e615686565b606091505b5091509150811561569a5791506112d89050565b8051156156aa5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611920578181015183820152602001611908565b5080546000825590600052602060002090810190611b649190615772565b828054828255906000526020600020908101928215615762579160200282015b828111156157625781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061572f565b5061576e929150615787565b5090565b5b8082111561576e5760008155600101615773565b5b8082111561576e5780546001600160a01b031916815560010161578856fe6c696d69742073686f756c642062652067726561746572207468616e2063757272656e74206f6e6573656e646572206973206e6f742061204d6f6e6f6c697468203246410000000073656e646572206973206e6f7420706572736f6e616c20324641206163636f756e74416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565b8d7171194501073e2d8151eeccf1398143c5df9acfb9868d0539a256164f6ca45434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564636f6e6669726d6564206f72207375626d6974746564206c696d6974206d69736d617463686f776e65722063616e6e6f742062652073657420746f207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565646e6f6e2d6d61746368696e672070656e64696e672077686974656c69737420686173685361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212204c4ffb8de5092033d34df73cdb860fa1e32c45c45284a1c3f6f2851997b0944764736f6c634300060c0033" // DeployWallet deploys a new Ethereum contract, binding an instance of Wallet to it. func DeployWallet(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Wallet, error) { @@ -267,32 +267,6 @@ func (_Wallet *WalletCallerSession) ControllerNode() ([32]byte, error) { return _Wallet.Contract.ControllerNode(&_Wallet.CallOpts) } -// ConvertToEther is a free data retrieval call binding the contract method 0xb87e21ef. -// -// Solidity: function convertToEther(address _token, uint256 _amount) constant returns(uint256) -func (_Wallet *WalletCaller) ConvertToEther(opts *bind.CallOpts, _token common.Address, _amount *big.Int) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "convertToEther", _token, _amount) - return *ret0, err -} - -// ConvertToEther is a free data retrieval call binding the contract method 0xb87e21ef. -// -// Solidity: function convertToEther(address _token, uint256 _amount) constant returns(uint256) -func (_Wallet *WalletSession) ConvertToEther(_token common.Address, _amount *big.Int) (*big.Int, error) { - return _Wallet.Contract.ConvertToEther(&_Wallet.CallOpts, _token, _amount) -} - -// ConvertToEther is a free data retrieval call binding the contract method 0xb87e21ef. -// -// Solidity: function convertToEther(address _token, uint256 _amount) constant returns(uint256) -func (_Wallet *WalletCallerSession) ConvertToEther(_token common.Address, _amount *big.Int) (*big.Int, error) { - return _Wallet.Contract.ConvertToEther(&_Wallet.CallOpts, _token, _amount) -} - // ConvertToStablecoin is a free data retrieval call binding the contract method 0xf36febda. // // Solidity: function convertToStablecoin(address _token, uint256 _amount) constant returns(uint256) @@ -319,134 +293,108 @@ func (_Wallet *WalletCallerSession) ConvertToStablecoin(_token common.Address, _ return _Wallet.Contract.ConvertToStablecoin(&_Wallet.CallOpts, _token, _amount) } -// EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. -// -// Solidity: function ensRegistry() constant returns(address) -func (_Wallet *WalletCaller) EnsRegistry(opts *bind.CallOpts) (common.Address, error) { - var ( - ret0 = new(common.Address) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "ensRegistry") - return *ret0, err -} - -// EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. -// -// Solidity: function ensRegistry() constant returns(address) -func (_Wallet *WalletSession) EnsRegistry() (common.Address, error) { - return _Wallet.Contract.EnsRegistry(&_Wallet.CallOpts) -} - -// EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. -// -// Solidity: function ensRegistry() constant returns(address) -func (_Wallet *WalletCallerSession) EnsRegistry() (common.Address, error) { - return _Wallet.Contract.EnsRegistry(&_Wallet.CallOpts) -} - -// GasTopUpLimitAvailable is a free data retrieval call binding the contract method 0x7d7d0046. +// DailyLimitAvailable is a free data retrieval call binding the contract method 0x45b12efc. // -// Solidity: function gasTopUpLimitAvailable() constant returns(uint256) -func (_Wallet *WalletCaller) GasTopUpLimitAvailable(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function dailyLimitAvailable() constant returns(uint256) +func (_Wallet *WalletCaller) DailyLimitAvailable(opts *bind.CallOpts) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "gasTopUpLimitAvailable") + err := _Wallet.contract.Call(opts, out, "dailyLimitAvailable") return *ret0, err } -// GasTopUpLimitAvailable is a free data retrieval call binding the contract method 0x7d7d0046. +// DailyLimitAvailable is a free data retrieval call binding the contract method 0x45b12efc. // -// Solidity: function gasTopUpLimitAvailable() constant returns(uint256) -func (_Wallet *WalletSession) GasTopUpLimitAvailable() (*big.Int, error) { - return _Wallet.Contract.GasTopUpLimitAvailable(&_Wallet.CallOpts) +// Solidity: function dailyLimitAvailable() constant returns(uint256) +func (_Wallet *WalletSession) DailyLimitAvailable() (*big.Int, error) { + return _Wallet.Contract.DailyLimitAvailable(&_Wallet.CallOpts) } -// GasTopUpLimitAvailable is a free data retrieval call binding the contract method 0x7d7d0046. +// DailyLimitAvailable is a free data retrieval call binding the contract method 0x45b12efc. // -// Solidity: function gasTopUpLimitAvailable() constant returns(uint256) -func (_Wallet *WalletCallerSession) GasTopUpLimitAvailable() (*big.Int, error) { - return _Wallet.Contract.GasTopUpLimitAvailable(&_Wallet.CallOpts) +// Solidity: function dailyLimitAvailable() constant returns(uint256) +func (_Wallet *WalletCallerSession) DailyLimitAvailable() (*big.Int, error) { + return _Wallet.Contract.DailyLimitAvailable(&_Wallet.CallOpts) } -// GasTopUpLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xf776f518. +// DailyLimitPending is a free data retrieval call binding the contract method 0x3b8252fa. // -// Solidity: function gasTopUpLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletCaller) GasTopUpLimitControllerConfirmationRequired(opts *bind.CallOpts) (bool, error) { +// Solidity: function dailyLimitPending() constant returns(uint256) +func (_Wallet *WalletCaller) DailyLimitPending(opts *bind.CallOpts) (*big.Int, error) { var ( - ret0 = new(bool) + ret0 = new(*big.Int) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "gasTopUpLimitControllerConfirmationRequired") + err := _Wallet.contract.Call(opts, out, "dailyLimitPending") return *ret0, err } -// GasTopUpLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xf776f518. +// DailyLimitPending is a free data retrieval call binding the contract method 0x3b8252fa. // -// Solidity: function gasTopUpLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletSession) GasTopUpLimitControllerConfirmationRequired() (bool, error) { - return _Wallet.Contract.GasTopUpLimitControllerConfirmationRequired(&_Wallet.CallOpts) +// Solidity: function dailyLimitPending() constant returns(uint256) +func (_Wallet *WalletSession) DailyLimitPending() (*big.Int, error) { + return _Wallet.Contract.DailyLimitPending(&_Wallet.CallOpts) } -// GasTopUpLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xf776f518. +// DailyLimitPending is a free data retrieval call binding the contract method 0x3b8252fa. // -// Solidity: function gasTopUpLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletCallerSession) GasTopUpLimitControllerConfirmationRequired() (bool, error) { - return _Wallet.Contract.GasTopUpLimitControllerConfirmationRequired(&_Wallet.CallOpts) +// Solidity: function dailyLimitPending() constant returns(uint256) +func (_Wallet *WalletCallerSession) DailyLimitPending() (*big.Int, error) { + return _Wallet.Contract.DailyLimitPending(&_Wallet.CallOpts) } -// GasTopUpLimitPending is a free data retrieval call binding the contract method 0xcc0e7e56. +// DailyLimitValue is a free data retrieval call binding the contract method 0x4d9aa248. // -// Solidity: function gasTopUpLimitPending() constant returns(uint256) -func (_Wallet *WalletCaller) GasTopUpLimitPending(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function dailyLimitValue() constant returns(uint256) +func (_Wallet *WalletCaller) DailyLimitValue(opts *bind.CallOpts) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "gasTopUpLimitPending") + err := _Wallet.contract.Call(opts, out, "dailyLimitValue") return *ret0, err } -// GasTopUpLimitPending is a free data retrieval call binding the contract method 0xcc0e7e56. +// DailyLimitValue is a free data retrieval call binding the contract method 0x4d9aa248. // -// Solidity: function gasTopUpLimitPending() constant returns(uint256) -func (_Wallet *WalletSession) GasTopUpLimitPending() (*big.Int, error) { - return _Wallet.Contract.GasTopUpLimitPending(&_Wallet.CallOpts) +// Solidity: function dailyLimitValue() constant returns(uint256) +func (_Wallet *WalletSession) DailyLimitValue() (*big.Int, error) { + return _Wallet.Contract.DailyLimitValue(&_Wallet.CallOpts) } -// GasTopUpLimitPending is a free data retrieval call binding the contract method 0xcc0e7e56. +// DailyLimitValue is a free data retrieval call binding the contract method 0x4d9aa248. // -// Solidity: function gasTopUpLimitPending() constant returns(uint256) -func (_Wallet *WalletCallerSession) GasTopUpLimitPending() (*big.Int, error) { - return _Wallet.Contract.GasTopUpLimitPending(&_Wallet.CallOpts) +// Solidity: function dailyLimitValue() constant returns(uint256) +func (_Wallet *WalletCallerSession) DailyLimitValue() (*big.Int, error) { + return _Wallet.Contract.DailyLimitValue(&_Wallet.CallOpts) } -// GasTopUpLimitValue is a free data retrieval call binding the contract method 0x2587a6a2. +// EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. // -// Solidity: function gasTopUpLimitValue() constant returns(uint256) -func (_Wallet *WalletCaller) GasTopUpLimitValue(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function ensRegistry() constant returns(address) +func (_Wallet *WalletCaller) EnsRegistry(opts *bind.CallOpts) (common.Address, error) { var ( - ret0 = new(*big.Int) + ret0 = new(common.Address) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "gasTopUpLimitValue") + err := _Wallet.contract.Call(opts, out, "ensRegistry") return *ret0, err } -// GasTopUpLimitValue is a free data retrieval call binding the contract method 0x2587a6a2. +// EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. // -// Solidity: function gasTopUpLimitValue() constant returns(uint256) -func (_Wallet *WalletSession) GasTopUpLimitValue() (*big.Int, error) { - return _Wallet.Contract.GasTopUpLimitValue(&_Wallet.CallOpts) +// Solidity: function ensRegistry() constant returns(address) +func (_Wallet *WalletSession) EnsRegistry() (common.Address, error) { + return _Wallet.Contract.EnsRegistry(&_Wallet.CallOpts) } -// GasTopUpLimitValue is a free data retrieval call binding the contract method 0x2587a6a2. +// EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. // -// Solidity: function gasTopUpLimitValue() constant returns(uint256) -func (_Wallet *WalletCallerSession) GasTopUpLimitValue() (*big.Int, error) { - return _Wallet.Contract.GasTopUpLimitValue(&_Wallet.CallOpts) +// Solidity: function ensRegistry() constant returns(address) +func (_Wallet *WalletCallerSession) EnsRegistry() (common.Address, error) { + return _Wallet.Contract.EnsRegistry(&_Wallet.CallOpts) } // GetBalance is a free data retrieval call binding the contract method 0xf8b2cb4f. @@ -605,108 +553,30 @@ func (_Wallet *WalletCallerSession) LicenceNode() ([32]byte, error) { return _Wallet.Contract.LicenceNode(&_Wallet.CallOpts) } -// LoadLimitAvailable is a free data retrieval call binding the contract method 0x1efd0299. -// -// Solidity: function loadLimitAvailable() constant returns(uint256) -func (_Wallet *WalletCaller) LoadLimitAvailable(opts *bind.CallOpts) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "loadLimitAvailable") - return *ret0, err -} - -// LoadLimitAvailable is a free data retrieval call binding the contract method 0x1efd0299. +// Monolith2FA is a free data retrieval call binding the contract method 0xcf0a866b. // -// Solidity: function loadLimitAvailable() constant returns(uint256) -func (_Wallet *WalletSession) LoadLimitAvailable() (*big.Int, error) { - return _Wallet.Contract.LoadLimitAvailable(&_Wallet.CallOpts) -} - -// LoadLimitAvailable is a free data retrieval call binding the contract method 0x1efd0299. -// -// Solidity: function loadLimitAvailable() constant returns(uint256) -func (_Wallet *WalletCallerSession) LoadLimitAvailable() (*big.Int, error) { - return _Wallet.Contract.LoadLimitAvailable(&_Wallet.CallOpts) -} - -// LoadLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xab205993. -// -// Solidity: function loadLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletCaller) LoadLimitControllerConfirmationRequired(opts *bind.CallOpts) (bool, error) { +// Solidity: function monolith2FA() constant returns(bool) +func (_Wallet *WalletCaller) Monolith2FA(opts *bind.CallOpts) (bool, error) { var ( ret0 = new(bool) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "loadLimitControllerConfirmationRequired") - return *ret0, err -} - -// LoadLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xab205993. -// -// Solidity: function loadLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletSession) LoadLimitControllerConfirmationRequired() (bool, error) { - return _Wallet.Contract.LoadLimitControllerConfirmationRequired(&_Wallet.CallOpts) -} - -// LoadLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xab205993. -// -// Solidity: function loadLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletCallerSession) LoadLimitControllerConfirmationRequired() (bool, error) { - return _Wallet.Contract.LoadLimitControllerConfirmationRequired(&_Wallet.CallOpts) -} - -// LoadLimitPending is a free data retrieval call binding the contract method 0xc4856cd9. -// -// Solidity: function loadLimitPending() constant returns(uint256) -func (_Wallet *WalletCaller) LoadLimitPending(opts *bind.CallOpts) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "loadLimitPending") - return *ret0, err -} - -// LoadLimitPending is a free data retrieval call binding the contract method 0xc4856cd9. -// -// Solidity: function loadLimitPending() constant returns(uint256) -func (_Wallet *WalletSession) LoadLimitPending() (*big.Int, error) { - return _Wallet.Contract.LoadLimitPending(&_Wallet.CallOpts) -} - -// LoadLimitPending is a free data retrieval call binding the contract method 0xc4856cd9. -// -// Solidity: function loadLimitPending() constant returns(uint256) -func (_Wallet *WalletCallerSession) LoadLimitPending() (*big.Int, error) { - return _Wallet.Contract.LoadLimitPending(&_Wallet.CallOpts) -} - -// LoadLimitValue is a free data retrieval call binding the contract method 0xda84b1ed. -// -// Solidity: function loadLimitValue() constant returns(uint256) -func (_Wallet *WalletCaller) LoadLimitValue(opts *bind.CallOpts) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "loadLimitValue") + err := _Wallet.contract.Call(opts, out, "monolith2FA") return *ret0, err } -// LoadLimitValue is a free data retrieval call binding the contract method 0xda84b1ed. +// Monolith2FA is a free data retrieval call binding the contract method 0xcf0a866b. // -// Solidity: function loadLimitValue() constant returns(uint256) -func (_Wallet *WalletSession) LoadLimitValue() (*big.Int, error) { - return _Wallet.Contract.LoadLimitValue(&_Wallet.CallOpts) +// Solidity: function monolith2FA() constant returns(bool) +func (_Wallet *WalletSession) Monolith2FA() (bool, error) { + return _Wallet.Contract.Monolith2FA(&_Wallet.CallOpts) } -// LoadLimitValue is a free data retrieval call binding the contract method 0xda84b1ed. +// Monolith2FA is a free data retrieval call binding the contract method 0xcf0a866b. // -// Solidity: function loadLimitValue() constant returns(uint256) -func (_Wallet *WalletCallerSession) LoadLimitValue() (*big.Int, error) { - return _Wallet.Contract.LoadLimitValue(&_Wallet.CallOpts) +// Solidity: function monolith2FA() constant returns(bool) +func (_Wallet *WalletCallerSession) Monolith2FA() (bool, error) { + return _Wallet.Contract.Monolith2FA(&_Wallet.CallOpts) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -787,134 +657,82 @@ func (_Wallet *WalletCallerSession) PendingWhitelistRemoval() ([]common.Address, return _Wallet.Contract.PendingWhitelistRemoval(&_Wallet.CallOpts) } -// RelayNonce is a free data retrieval call binding the contract method 0xcccdc556. -// -// Solidity: function relayNonce() constant returns(uint256) -func (_Wallet *WalletCaller) RelayNonce(opts *bind.CallOpts) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "relayNonce") - return *ret0, err -} - -// RelayNonce is a free data retrieval call binding the contract method 0xcccdc556. -// -// Solidity: function relayNonce() constant returns(uint256) -func (_Wallet *WalletSession) RelayNonce() (*big.Int, error) { - return _Wallet.Contract.RelayNonce(&_Wallet.CallOpts) -} - -// RelayNonce is a free data retrieval call binding the contract method 0xcccdc556. -// -// Solidity: function relayNonce() constant returns(uint256) -func (_Wallet *WalletCallerSession) RelayNonce() (*big.Int, error) { - return _Wallet.Contract.RelayNonce(&_Wallet.CallOpts) -} - -// SpendLimitAvailable is a free data retrieval call binding the contract method 0x5d2362a8. +// Personal2FA is a free data retrieval call binding the contract method 0x47d125af. // -// Solidity: function spendLimitAvailable() constant returns(uint256) -func (_Wallet *WalletCaller) SpendLimitAvailable(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function personal2FA() constant returns(address) +func (_Wallet *WalletCaller) Personal2FA(opts *bind.CallOpts) (common.Address, error) { var ( - ret0 = new(*big.Int) + ret0 = new(common.Address) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "spendLimitAvailable") + err := _Wallet.contract.Call(opts, out, "personal2FA") return *ret0, err } -// SpendLimitAvailable is a free data retrieval call binding the contract method 0x5d2362a8. +// Personal2FA is a free data retrieval call binding the contract method 0x47d125af. // -// Solidity: function spendLimitAvailable() constant returns(uint256) -func (_Wallet *WalletSession) SpendLimitAvailable() (*big.Int, error) { - return _Wallet.Contract.SpendLimitAvailable(&_Wallet.CallOpts) +// Solidity: function personal2FA() constant returns(address) +func (_Wallet *WalletSession) Personal2FA() (common.Address, error) { + return _Wallet.Contract.Personal2FA(&_Wallet.CallOpts) } -// SpendLimitAvailable is a free data retrieval call binding the contract method 0x5d2362a8. +// Personal2FA is a free data retrieval call binding the contract method 0x47d125af. // -// Solidity: function spendLimitAvailable() constant returns(uint256) -func (_Wallet *WalletCallerSession) SpendLimitAvailable() (*big.Int, error) { - return _Wallet.Contract.SpendLimitAvailable(&_Wallet.CallOpts) +// Solidity: function personal2FA() constant returns(address) +func (_Wallet *WalletCallerSession) Personal2FA() (common.Address, error) { + return _Wallet.Contract.Personal2FA(&_Wallet.CallOpts) } -// SpendLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xbcb8b74a. +// Privileged is a free data retrieval call binding the contract method 0xced99cce. // -// Solidity: function spendLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletCaller) SpendLimitControllerConfirmationRequired(opts *bind.CallOpts) (bool, error) { +// Solidity: function privileged() constant returns(bool) +func (_Wallet *WalletCaller) Privileged(opts *bind.CallOpts) (bool, error) { var ( ret0 = new(bool) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "spendLimitControllerConfirmationRequired") - return *ret0, err -} - -// SpendLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xbcb8b74a. -// -// Solidity: function spendLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletSession) SpendLimitControllerConfirmationRequired() (bool, error) { - return _Wallet.Contract.SpendLimitControllerConfirmationRequired(&_Wallet.CallOpts) -} - -// SpendLimitControllerConfirmationRequired is a free data retrieval call binding the contract method 0xbcb8b74a. -// -// Solidity: function spendLimitControllerConfirmationRequired() constant returns(bool) -func (_Wallet *WalletCallerSession) SpendLimitControllerConfirmationRequired() (bool, error) { - return _Wallet.Contract.SpendLimitControllerConfirmationRequired(&_Wallet.CallOpts) -} - -// SpendLimitPending is a free data retrieval call binding the contract method 0x027ef3eb. -// -// Solidity: function spendLimitPending() constant returns(uint256) -func (_Wallet *WalletCaller) SpendLimitPending(opts *bind.CallOpts) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Wallet.contract.Call(opts, out, "spendLimitPending") + err := _Wallet.contract.Call(opts, out, "privileged") return *ret0, err } -// SpendLimitPending is a free data retrieval call binding the contract method 0x027ef3eb. +// Privileged is a free data retrieval call binding the contract method 0xced99cce. // -// Solidity: function spendLimitPending() constant returns(uint256) -func (_Wallet *WalletSession) SpendLimitPending() (*big.Int, error) { - return _Wallet.Contract.SpendLimitPending(&_Wallet.CallOpts) +// Solidity: function privileged() constant returns(bool) +func (_Wallet *WalletSession) Privileged() (bool, error) { + return _Wallet.Contract.Privileged(&_Wallet.CallOpts) } -// SpendLimitPending is a free data retrieval call binding the contract method 0x027ef3eb. +// Privileged is a free data retrieval call binding the contract method 0xced99cce. // -// Solidity: function spendLimitPending() constant returns(uint256) -func (_Wallet *WalletCallerSession) SpendLimitPending() (*big.Int, error) { - return _Wallet.Contract.SpendLimitPending(&_Wallet.CallOpts) +// Solidity: function privileged() constant returns(bool) +func (_Wallet *WalletCallerSession) Privileged() (bool, error) { + return _Wallet.Contract.Privileged(&_Wallet.CallOpts) } -// SpendLimitValue is a free data retrieval call binding the contract method 0x9b0dfd27. +// RelayNonce is a free data retrieval call binding the contract method 0xcccdc556. // -// Solidity: function spendLimitValue() constant returns(uint256) -func (_Wallet *WalletCaller) SpendLimitValue(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function relayNonce() constant returns(uint256) +func (_Wallet *WalletCaller) RelayNonce(opts *bind.CallOpts) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 - err := _Wallet.contract.Call(opts, out, "spendLimitValue") + err := _Wallet.contract.Call(opts, out, "relayNonce") return *ret0, err } -// SpendLimitValue is a free data retrieval call binding the contract method 0x9b0dfd27. +// RelayNonce is a free data retrieval call binding the contract method 0xcccdc556. // -// Solidity: function spendLimitValue() constant returns(uint256) -func (_Wallet *WalletSession) SpendLimitValue() (*big.Int, error) { - return _Wallet.Contract.SpendLimitValue(&_Wallet.CallOpts) +// Solidity: function relayNonce() constant returns(uint256) +func (_Wallet *WalletSession) RelayNonce() (*big.Int, error) { + return _Wallet.Contract.RelayNonce(&_Wallet.CallOpts) } -// SpendLimitValue is a free data retrieval call binding the contract method 0x9b0dfd27. +// RelayNonce is a free data retrieval call binding the contract method 0xcccdc556. // -// Solidity: function spendLimitValue() constant returns(uint256) -func (_Wallet *WalletCallerSession) SpendLimitValue() (*big.Int, error) { - return _Wallet.Contract.SpendLimitValue(&_Wallet.CallOpts) +// Solidity: function relayNonce() constant returns(uint256) +func (_Wallet *WalletCallerSession) RelayNonce() (*big.Int, error) { + return _Wallet.Contract.RelayNonce(&_Wallet.CallOpts) } // SubmittedWhitelistAddition is a free data retrieval call binding the contract method 0x26d05ab2. @@ -1136,67 +954,25 @@ func (_Wallet *WalletTransactorSession) CancelWhitelistRemoval(_hash [32]byte) ( return _Wallet.Contract.CancelWhitelistRemoval(&_Wallet.TransactOpts, _hash) } -// ConfirmGasTopUpLimitUpdate is a paid mutator transaction binding the contract method 0xf41c4319. -// -// Solidity: function confirmGasTopUpLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactor) ConfirmGasTopUpLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "confirmGasTopUpLimitUpdate", _amount) -} - -// ConfirmGasTopUpLimitUpdate is a paid mutator transaction binding the contract method 0xf41c4319. -// -// Solidity: function confirmGasTopUpLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletSession) ConfirmGasTopUpLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.ConfirmGasTopUpLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// ConfirmGasTopUpLimitUpdate is a paid mutator transaction binding the contract method 0xf41c4319. -// -// Solidity: function confirmGasTopUpLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) ConfirmGasTopUpLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.ConfirmGasTopUpLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// ConfirmLoadLimitUpdate is a paid mutator transaction binding the contract method 0xf40b51f8. -// -// Solidity: function confirmLoadLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactor) ConfirmLoadLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "confirmLoadLimitUpdate", _amount) -} - -// ConfirmLoadLimitUpdate is a paid mutator transaction binding the contract method 0xf40b51f8. -// -// Solidity: function confirmLoadLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletSession) ConfirmLoadLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.ConfirmLoadLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// ConfirmLoadLimitUpdate is a paid mutator transaction binding the contract method 0xf40b51f8. -// -// Solidity: function confirmLoadLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) ConfirmLoadLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.ConfirmLoadLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// ConfirmSpendLimitUpdate is a paid mutator transaction binding the contract method 0xeadd3cea. +// ConfirmDailyLimitUpdate is a paid mutator transaction binding the contract method 0x6c37a7e6. // -// Solidity: function confirmSpendLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactor) ConfirmSpendLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "confirmSpendLimitUpdate", _amount) +// Solidity: function confirmDailyLimitUpdate(uint256 _amount) returns() +func (_Wallet *WalletTransactor) ConfirmDailyLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { + return _Wallet.contract.Transact(opts, "confirmDailyLimitUpdate", _amount) } -// ConfirmSpendLimitUpdate is a paid mutator transaction binding the contract method 0xeadd3cea. +// ConfirmDailyLimitUpdate is a paid mutator transaction binding the contract method 0x6c37a7e6. // -// Solidity: function confirmSpendLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletSession) ConfirmSpendLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.ConfirmSpendLimitUpdate(&_Wallet.TransactOpts, _amount) +// Solidity: function confirmDailyLimitUpdate(uint256 _amount) returns() +func (_Wallet *WalletSession) ConfirmDailyLimitUpdate(_amount *big.Int) (*types.Transaction, error) { + return _Wallet.Contract.ConfirmDailyLimitUpdate(&_Wallet.TransactOpts, _amount) } -// ConfirmSpendLimitUpdate is a paid mutator transaction binding the contract method 0xeadd3cea. +// ConfirmDailyLimitUpdate is a paid mutator transaction binding the contract method 0x6c37a7e6. // -// Solidity: function confirmSpendLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) ConfirmSpendLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.ConfirmSpendLimitUpdate(&_Wallet.TransactOpts, _amount) +// Solidity: function confirmDailyLimitUpdate(uint256 _amount) returns() +func (_Wallet *WalletTransactorSession) ConfirmDailyLimitUpdate(_amount *big.Int) (*types.Transaction, error) { + return _Wallet.Contract.ConfirmDailyLimitUpdate(&_Wallet.TransactOpts, _amount) } // ConfirmWhitelistAddition is a paid mutator transaction binding the contract method 0x5adc02ab. @@ -1241,6 +1017,27 @@ func (_Wallet *WalletTransactorSession) ConfirmWhitelistRemoval(_hash [32]byte) return _Wallet.Contract.ConfirmWhitelistRemoval(&_Wallet.TransactOpts, _hash) } +// ExecutePrivilegedRelayedTransaction is a paid mutator transaction binding the contract method 0xc1e559a3. +// +// Solidity: function executePrivilegedRelayedTransaction(uint256 _nonce, bytes _data, bytes _signature) returns() +func (_Wallet *WalletTransactor) ExecutePrivilegedRelayedTransaction(opts *bind.TransactOpts, _nonce *big.Int, _data []byte, _signature []byte) (*types.Transaction, error) { + return _Wallet.contract.Transact(opts, "executePrivilegedRelayedTransaction", _nonce, _data, _signature) +} + +// ExecutePrivilegedRelayedTransaction is a paid mutator transaction binding the contract method 0xc1e559a3. +// +// Solidity: function executePrivilegedRelayedTransaction(uint256 _nonce, bytes _data, bytes _signature) returns() +func (_Wallet *WalletSession) ExecutePrivilegedRelayedTransaction(_nonce *big.Int, _data []byte, _signature []byte) (*types.Transaction, error) { + return _Wallet.Contract.ExecutePrivilegedRelayedTransaction(&_Wallet.TransactOpts, _nonce, _data, _signature) +} + +// ExecutePrivilegedRelayedTransaction is a paid mutator transaction binding the contract method 0xc1e559a3. +// +// Solidity: function executePrivilegedRelayedTransaction(uint256 _nonce, bytes _data, bytes _signature) returns() +func (_Wallet *WalletTransactorSession) ExecutePrivilegedRelayedTransaction(_nonce *big.Int, _data []byte, _signature []byte) (*types.Transaction, error) { + return _Wallet.Contract.ExecutePrivilegedRelayedTransaction(&_Wallet.TransactOpts, _nonce, _data, _signature) +} + // ExecuteRelayedTransaction is a paid mutator transaction binding the contract method 0x46efe0ed. // // Solidity: function executeRelayedTransaction(uint256 _nonce, bytes _data, bytes _signature) returns() @@ -1306,23 +1103,23 @@ func (_Wallet *WalletTransactorSession) IncreaseRelayNonce() (*types.Transaction // InitializeWallet is a paid mutator transaction binding the contract method 0x69efdfc0. // -// Solidity: function initializeWallet(address _owner_, bool _transferable_, address _ens_, bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, uint256 _spendLimit_) returns() -func (_Wallet *WalletTransactor) InitializeWallet(opts *bind.TransactOpts, _owner_ common.Address, _transferable_ bool, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _spendLimit_ *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "initializeWallet", _owner_, _transferable_, _ens_, _tokenWhitelistNode_, _controllerNode_, _licenceNode_, _spendLimit_) +// Solidity: function initializeWallet(address _owner_, bool _transferable_, address _ens_, bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, uint256 _dailyLimit_) returns() +func (_Wallet *WalletTransactor) InitializeWallet(opts *bind.TransactOpts, _owner_ common.Address, _transferable_ bool, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _dailyLimit_ *big.Int) (*types.Transaction, error) { + return _Wallet.contract.Transact(opts, "initializeWallet", _owner_, _transferable_, _ens_, _tokenWhitelistNode_, _controllerNode_, _licenceNode_, _dailyLimit_) } // InitializeWallet is a paid mutator transaction binding the contract method 0x69efdfc0. // -// Solidity: function initializeWallet(address _owner_, bool _transferable_, address _ens_, bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, uint256 _spendLimit_) returns() -func (_Wallet *WalletSession) InitializeWallet(_owner_ common.Address, _transferable_ bool, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _spendLimit_ *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.InitializeWallet(&_Wallet.TransactOpts, _owner_, _transferable_, _ens_, _tokenWhitelistNode_, _controllerNode_, _licenceNode_, _spendLimit_) +// Solidity: function initializeWallet(address _owner_, bool _transferable_, address _ens_, bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, uint256 _dailyLimit_) returns() +func (_Wallet *WalletSession) InitializeWallet(_owner_ common.Address, _transferable_ bool, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _dailyLimit_ *big.Int) (*types.Transaction, error) { + return _Wallet.Contract.InitializeWallet(&_Wallet.TransactOpts, _owner_, _transferable_, _ens_, _tokenWhitelistNode_, _controllerNode_, _licenceNode_, _dailyLimit_) } // InitializeWallet is a paid mutator transaction binding the contract method 0x69efdfc0. // -// Solidity: function initializeWallet(address _owner_, bool _transferable_, address _ens_, bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, uint256 _spendLimit_) returns() -func (_Wallet *WalletTransactorSession) InitializeWallet(_owner_ common.Address, _transferable_ bool, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _spendLimit_ *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.InitializeWallet(&_Wallet.TransactOpts, _owner_, _transferable_, _ens_, _tokenWhitelistNode_, _controllerNode_, _licenceNode_, _spendLimit_) +// Solidity: function initializeWallet(address _owner_, bool _transferable_, address _ens_, bytes32 _tokenWhitelistNode_, bytes32 _controllerNode_, bytes32 _licenceNode_, uint256 _dailyLimit_) returns() +func (_Wallet *WalletTransactorSession) InitializeWallet(_owner_ common.Address, _transferable_ bool, _ens_ common.Address, _tokenWhitelistNode_ [32]byte, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _dailyLimit_ *big.Int) (*types.Transaction, error) { + return _Wallet.Contract.InitializeWallet(&_Wallet.TransactOpts, _owner_, _transferable_, _ens_, _tokenWhitelistNode_, _controllerNode_, _licenceNode_, _dailyLimit_) } // LoadTokenCard is a paid mutator transaction binding the contract method 0x3a43199f. @@ -1367,67 +1164,46 @@ func (_Wallet *WalletTransactorSession) RenounceOwnership() (*types.Transaction, return _Wallet.Contract.RenounceOwnership(&_Wallet.TransactOpts) } -// SetGasTopUpLimit is a paid mutator transaction binding the contract method 0x0f3a85d8. -// -// Solidity: function setGasTopUpLimit(uint256 _amount) returns() -func (_Wallet *WalletTransactor) SetGasTopUpLimit(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "setGasTopUpLimit", _amount) -} - -// SetGasTopUpLimit is a paid mutator transaction binding the contract method 0x0f3a85d8. -// -// Solidity: function setGasTopUpLimit(uint256 _amount) returns() -func (_Wallet *WalletSession) SetGasTopUpLimit(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SetGasTopUpLimit(&_Wallet.TransactOpts, _amount) -} - -// SetGasTopUpLimit is a paid mutator transaction binding the contract method 0x0f3a85d8. -// -// Solidity: function setGasTopUpLimit(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) SetGasTopUpLimit(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SetGasTopUpLimit(&_Wallet.TransactOpts, _amount) -} - -// SetLoadLimit is a paid mutator transaction binding the contract method 0x3bfec254. +// SetMonolith2FA is a paid mutator transaction binding the contract method 0xad95580b. // -// Solidity: function setLoadLimit(uint256 _amount) returns() -func (_Wallet *WalletTransactor) SetLoadLimit(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "setLoadLimit", _amount) +// Solidity: function setMonolith2FA() returns() +func (_Wallet *WalletTransactor) SetMonolith2FA(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Wallet.contract.Transact(opts, "setMonolith2FA") } -// SetLoadLimit is a paid mutator transaction binding the contract method 0x3bfec254. +// SetMonolith2FA is a paid mutator transaction binding the contract method 0xad95580b. // -// Solidity: function setLoadLimit(uint256 _amount) returns() -func (_Wallet *WalletSession) SetLoadLimit(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SetLoadLimit(&_Wallet.TransactOpts, _amount) +// Solidity: function setMonolith2FA() returns() +func (_Wallet *WalletSession) SetMonolith2FA() (*types.Transaction, error) { + return _Wallet.Contract.SetMonolith2FA(&_Wallet.TransactOpts) } -// SetLoadLimit is a paid mutator transaction binding the contract method 0x3bfec254. +// SetMonolith2FA is a paid mutator transaction binding the contract method 0xad95580b. // -// Solidity: function setLoadLimit(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) SetLoadLimit(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SetLoadLimit(&_Wallet.TransactOpts, _amount) +// Solidity: function setMonolith2FA() returns() +func (_Wallet *WalletTransactorSession) SetMonolith2FA() (*types.Transaction, error) { + return _Wallet.Contract.SetMonolith2FA(&_Wallet.TransactOpts) } -// SetSpendLimit is a paid mutator transaction binding the contract method 0x3c672eb7. +// SetPersonal2FA is a paid mutator transaction binding the contract method 0x7b580e75. // -// Solidity: function setSpendLimit(uint256 _amount) returns() -func (_Wallet *WalletTransactor) SetSpendLimit(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "setSpendLimit", _amount) +// Solidity: function setPersonal2FA(address _p2FA) returns() +func (_Wallet *WalletTransactor) SetPersonal2FA(opts *bind.TransactOpts, _p2FA common.Address) (*types.Transaction, error) { + return _Wallet.contract.Transact(opts, "setPersonal2FA", _p2FA) } -// SetSpendLimit is a paid mutator transaction binding the contract method 0x3c672eb7. +// SetPersonal2FA is a paid mutator transaction binding the contract method 0x7b580e75. // -// Solidity: function setSpendLimit(uint256 _amount) returns() -func (_Wallet *WalletSession) SetSpendLimit(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SetSpendLimit(&_Wallet.TransactOpts, _amount) +// Solidity: function setPersonal2FA(address _p2FA) returns() +func (_Wallet *WalletSession) SetPersonal2FA(_p2FA common.Address) (*types.Transaction, error) { + return _Wallet.Contract.SetPersonal2FA(&_Wallet.TransactOpts, _p2FA) } -// SetSpendLimit is a paid mutator transaction binding the contract method 0x3c672eb7. +// SetPersonal2FA is a paid mutator transaction binding the contract method 0x7b580e75. // -// Solidity: function setSpendLimit(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) SetSpendLimit(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SetSpendLimit(&_Wallet.TransactOpts, _amount) +// Solidity: function setPersonal2FA(address _p2FA) returns() +func (_Wallet *WalletTransactorSession) SetPersonal2FA(_p2FA common.Address) (*types.Transaction, error) { + return _Wallet.Contract.SetPersonal2FA(&_Wallet.TransactOpts, _p2FA) } // SetWhitelist is a paid mutator transaction binding the contract method 0xf4217648. @@ -1451,67 +1227,25 @@ func (_Wallet *WalletTransactorSession) SetWhitelist(_addresses []common.Address return _Wallet.Contract.SetWhitelist(&_Wallet.TransactOpts, _addresses) } -// SubmitGasTopUpLimitUpdate is a paid mutator transaction binding the contract method 0x74624c55. -// -// Solidity: function submitGasTopUpLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactor) SubmitGasTopUpLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "submitGasTopUpLimitUpdate", _amount) -} - -// SubmitGasTopUpLimitUpdate is a paid mutator transaction binding the contract method 0x74624c55. -// -// Solidity: function submitGasTopUpLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletSession) SubmitGasTopUpLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SubmitGasTopUpLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// SubmitGasTopUpLimitUpdate is a paid mutator transaction binding the contract method 0x74624c55. -// -// Solidity: function submitGasTopUpLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) SubmitGasTopUpLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SubmitGasTopUpLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// SubmitLoadLimitUpdate is a paid mutator transaction binding the contract method 0xb221f316. -// -// Solidity: function submitLoadLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactor) SubmitLoadLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "submitLoadLimitUpdate", _amount) -} - -// SubmitLoadLimitUpdate is a paid mutator transaction binding the contract method 0xb221f316. +// SubmitDailyLimitUpdate is a paid mutator transaction binding the contract method 0x458d07f2. // -// Solidity: function submitLoadLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletSession) SubmitLoadLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SubmitLoadLimitUpdate(&_Wallet.TransactOpts, _amount) +// Solidity: function submitDailyLimitUpdate(uint256 _amount) returns() +func (_Wallet *WalletTransactor) SubmitDailyLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { + return _Wallet.contract.Transact(opts, "submitDailyLimitUpdate", _amount) } -// SubmitLoadLimitUpdate is a paid mutator transaction binding the contract method 0xb221f316. +// SubmitDailyLimitUpdate is a paid mutator transaction binding the contract method 0x458d07f2. // -// Solidity: function submitLoadLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) SubmitLoadLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SubmitLoadLimitUpdate(&_Wallet.TransactOpts, _amount) +// Solidity: function submitDailyLimitUpdate(uint256 _amount) returns() +func (_Wallet *WalletSession) SubmitDailyLimitUpdate(_amount *big.Int) (*types.Transaction, error) { + return _Wallet.Contract.SubmitDailyLimitUpdate(&_Wallet.TransactOpts, _amount) } -// SubmitSpendLimitUpdate is a paid mutator transaction binding the contract method 0x21ce918d. +// SubmitDailyLimitUpdate is a paid mutator transaction binding the contract method 0x458d07f2. // -// Solidity: function submitSpendLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactor) SubmitSpendLimitUpdate(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { - return _Wallet.contract.Transact(opts, "submitSpendLimitUpdate", _amount) -} - -// SubmitSpendLimitUpdate is a paid mutator transaction binding the contract method 0x21ce918d. -// -// Solidity: function submitSpendLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletSession) SubmitSpendLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SubmitSpendLimitUpdate(&_Wallet.TransactOpts, _amount) -} - -// SubmitSpendLimitUpdate is a paid mutator transaction binding the contract method 0x21ce918d. -// -// Solidity: function submitSpendLimitUpdate(uint256 _amount) returns() -func (_Wallet *WalletTransactorSession) SubmitSpendLimitUpdate(_amount *big.Int) (*types.Transaction, error) { - return _Wallet.Contract.SubmitSpendLimitUpdate(&_Wallet.TransactOpts, _amount) +// Solidity: function submitDailyLimitUpdate(uint256 _amount) returns() +func (_Wallet *WalletTransactorSession) SubmitDailyLimitUpdate(_amount *big.Int) (*types.Transaction, error) { + return _Wallet.Contract.SubmitDailyLimitUpdate(&_Wallet.TransactOpts, _amount) } // SubmitWhitelistAddition is a paid mutator transaction binding the contract method 0x7fd004fa. @@ -2092,12 +1826,13 @@ func (it *WalletExecutedRelayedTransactionIterator) Close() error { type WalletExecutedRelayedTransaction struct { Data []byte ReturnData []byte + Privileged bool Raw types.Log // Blockchain specific contextual infos } -// FilterExecutedRelayedTransaction is a free log retrieval operation binding the contract event 0x823dbcf2b7b0f265871963ca65ac033f6b4c71e0d82cd123d2ff23d752dc21c1. +// FilterExecutedRelayedTransaction is a free log retrieval operation binding the contract event 0x7126c7fa27a233346a02741f8f1389f231dcf840ff4f32bd9d506fe85cabc7ec. // -// Solidity: event ExecutedRelayedTransaction(bytes _data, bytes _returnData) +// Solidity: event ExecutedRelayedTransaction(bytes _data, bytes _returnData, bool _privileged) func (_Wallet *WalletFilterer) FilterExecutedRelayedTransaction(opts *bind.FilterOpts) (*WalletExecutedRelayedTransactionIterator, error) { logs, sub, err := _Wallet.contract.FilterLogs(opts, "ExecutedRelayedTransaction") @@ -2107,9 +1842,9 @@ func (_Wallet *WalletFilterer) FilterExecutedRelayedTransaction(opts *bind.Filte return &WalletExecutedRelayedTransactionIterator{contract: _Wallet.contract, event: "ExecutedRelayedTransaction", logs: logs, sub: sub}, nil } -// WatchExecutedRelayedTransaction is a free log subscription operation binding the contract event 0x823dbcf2b7b0f265871963ca65ac033f6b4c71e0d82cd123d2ff23d752dc21c1. +// WatchExecutedRelayedTransaction is a free log subscription operation binding the contract event 0x7126c7fa27a233346a02741f8f1389f231dcf840ff4f32bd9d506fe85cabc7ec. // -// Solidity: event ExecutedRelayedTransaction(bytes _data, bytes _returnData) +// Solidity: event ExecutedRelayedTransaction(bytes _data, bytes _returnData, bool _privileged) func (_Wallet *WalletFilterer) WatchExecutedRelayedTransaction(opts *bind.WatchOpts, sink chan<- *WalletExecutedRelayedTransaction) (event.Subscription, error) { logs, sub, err := _Wallet.contract.WatchLogs(opts, "ExecutedRelayedTransaction") @@ -2144,9 +1879,9 @@ func (_Wallet *WalletFilterer) WatchExecutedRelayedTransaction(opts *bind.WatchO }), nil } -// ParseExecutedRelayedTransaction is a log parse operation binding the contract event 0x823dbcf2b7b0f265871963ca65ac033f6b4c71e0d82cd123d2ff23d752dc21c1. +// ParseExecutedRelayedTransaction is a log parse operation binding the contract event 0x7126c7fa27a233346a02741f8f1389f231dcf840ff4f32bd9d506fe85cabc7ec. // -// Solidity: event ExecutedRelayedTransaction(bytes _data, bytes _returnData) +// Solidity: event ExecutedRelayedTransaction(bytes _data, bytes _returnData, bool _privileged) func (_Wallet *WalletFilterer) ParseExecutedRelayedTransaction(log types.Log) (*WalletExecutedRelayedTransaction, error) { event := new(WalletExecutedRelayedTransaction) if err := _Wallet.contract.UnpackLog(event, "ExecutedRelayedTransaction", log); err != nil { @@ -2425,9 +2160,9 @@ func (_Wallet *WalletFilterer) ParseIncreasedRelayNonce(log types.Log) (*WalletI return event, nil } -// WalletLoadedTokenCardIterator is returned from FilterLoadedTokenCard and is used to iterate over the raw logs and unpacked data for LoadedTokenCard events raised by the Wallet contract. -type WalletLoadedTokenCardIterator struct { - Event *WalletLoadedTokenCard // Event containing the contract specifics and raw log +// WalletInitializedDailyLimitIterator is returned from FilterInitializedDailyLimit and is used to iterate over the raw logs and unpacked data for InitializedDailyLimit events raised by the Wallet contract. +type WalletInitializedDailyLimitIterator struct { + Event *WalletInitializedDailyLimit // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2441,7 +2176,7 @@ type WalletLoadedTokenCardIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletLoadedTokenCardIterator) Next() bool { +func (it *WalletInitializedDailyLimitIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2450,7 +2185,7 @@ func (it *WalletLoadedTokenCardIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletLoadedTokenCard) + it.Event = new(WalletInitializedDailyLimit) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2465,7 +2200,7 @@ func (it *WalletLoadedTokenCardIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletLoadedTokenCard) + it.Event = new(WalletInitializedDailyLimit) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2481,42 +2216,42 @@ func (it *WalletLoadedTokenCardIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletLoadedTokenCardIterator) Error() error { +func (it *WalletInitializedDailyLimitIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletLoadedTokenCardIterator) Close() error { +func (it *WalletInitializedDailyLimitIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletLoadedTokenCard represents a LoadedTokenCard event raised by the Wallet contract. -type WalletLoadedTokenCard struct { - Asset common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos +// WalletInitializedDailyLimit represents a InitializedDailyLimit event raised by the Wallet contract. +type WalletInitializedDailyLimit struct { + Amount *big.Int + NextReset *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterLoadedTokenCard is a free log retrieval operation binding the contract event 0x5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a. +// FilterInitializedDailyLimit is a free log retrieval operation binding the contract event 0x47dcdfb9e867032608a011a7b2438466389c6eba4d51bf520b402083def29caa. // -// Solidity: event LoadedTokenCard(address _asset, uint256 _amount) -func (_Wallet *WalletFilterer) FilterLoadedTokenCard(opts *bind.FilterOpts) (*WalletLoadedTokenCardIterator, error) { +// Solidity: event InitializedDailyLimit(uint256 _amount, uint256 _nextReset) +func (_Wallet *WalletFilterer) FilterInitializedDailyLimit(opts *bind.FilterOpts) (*WalletInitializedDailyLimitIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "LoadedTokenCard") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "InitializedDailyLimit") if err != nil { return nil, err } - return &WalletLoadedTokenCardIterator{contract: _Wallet.contract, event: "LoadedTokenCard", logs: logs, sub: sub}, nil + return &WalletInitializedDailyLimitIterator{contract: _Wallet.contract, event: "InitializedDailyLimit", logs: logs, sub: sub}, nil } -// WatchLoadedTokenCard is a free log subscription operation binding the contract event 0x5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a. +// WatchInitializedDailyLimit is a free log subscription operation binding the contract event 0x47dcdfb9e867032608a011a7b2438466389c6eba4d51bf520b402083def29caa. // -// Solidity: event LoadedTokenCard(address _asset, uint256 _amount) -func (_Wallet *WalletFilterer) WatchLoadedTokenCard(opts *bind.WatchOpts, sink chan<- *WalletLoadedTokenCard) (event.Subscription, error) { +// Solidity: event InitializedDailyLimit(uint256 _amount, uint256 _nextReset) +func (_Wallet *WalletFilterer) WatchInitializedDailyLimit(opts *bind.WatchOpts, sink chan<- *WalletInitializedDailyLimit) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "LoadedTokenCard") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "InitializedDailyLimit") if err != nil { return nil, err } @@ -2526,8 +2261,8 @@ func (_Wallet *WalletFilterer) WatchLoadedTokenCard(opts *bind.WatchOpts, sink c select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletLoadedTokenCard) - if err := _Wallet.contract.UnpackLog(event, "LoadedTokenCard", log); err != nil { + event := new(WalletInitializedDailyLimit) + if err := _Wallet.contract.UnpackLog(event, "InitializedDailyLimit", log); err != nil { return err } event.Raw = log @@ -2548,20 +2283,20 @@ func (_Wallet *WalletFilterer) WatchLoadedTokenCard(opts *bind.WatchOpts, sink c }), nil } -// ParseLoadedTokenCard is a log parse operation binding the contract event 0x5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a. +// ParseInitializedDailyLimit is a log parse operation binding the contract event 0x47dcdfb9e867032608a011a7b2438466389c6eba4d51bf520b402083def29caa. // -// Solidity: event LoadedTokenCard(address _asset, uint256 _amount) -func (_Wallet *WalletFilterer) ParseLoadedTokenCard(log types.Log) (*WalletLoadedTokenCard, error) { - event := new(WalletLoadedTokenCard) - if err := _Wallet.contract.UnpackLog(event, "LoadedTokenCard", log); err != nil { +// Solidity: event InitializedDailyLimit(uint256 _amount, uint256 _nextReset) +func (_Wallet *WalletFilterer) ParseInitializedDailyLimit(log types.Log) (*WalletInitializedDailyLimit, error) { + event := new(WalletInitializedDailyLimit) + if err := _Wallet.contract.UnpackLog(event, "InitializedDailyLimit", log); err != nil { return nil, err } return event, nil } -// WalletLockedOwnershipIterator is returned from FilterLockedOwnership and is used to iterate over the raw logs and unpacked data for LockedOwnership events raised by the Wallet contract. -type WalletLockedOwnershipIterator struct { - Event *WalletLockedOwnership // Event containing the contract specifics and raw log +// WalletLoadedTokenCardIterator is returned from FilterLoadedTokenCard and is used to iterate over the raw logs and unpacked data for LoadedTokenCard events raised by the Wallet contract. +type WalletLoadedTokenCardIterator struct { + Event *WalletLoadedTokenCard // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2575,7 +2310,7 @@ type WalletLockedOwnershipIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletLockedOwnershipIterator) Next() bool { +func (it *WalletLoadedTokenCardIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2584,7 +2319,7 @@ func (it *WalletLockedOwnershipIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletLockedOwnership) + it.Event = new(WalletLoadedTokenCard) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2599,7 +2334,7 @@ func (it *WalletLockedOwnershipIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletLockedOwnership) + it.Event = new(WalletLoadedTokenCard) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2615,175 +2350,42 @@ func (it *WalletLockedOwnershipIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletLockedOwnershipIterator) Error() error { +func (it *WalletLoadedTokenCardIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletLockedOwnershipIterator) Close() error { +func (it *WalletLoadedTokenCardIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletLockedOwnership represents a LockedOwnership event raised by the Wallet contract. -type WalletLockedOwnership struct { - Locked common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLockedOwnership is a free log retrieval operation binding the contract event 0x808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec122. -// -// Solidity: event LockedOwnership(address _locked) -func (_Wallet *WalletFilterer) FilterLockedOwnership(opts *bind.FilterOpts) (*WalletLockedOwnershipIterator, error) { - - logs, sub, err := _Wallet.contract.FilterLogs(opts, "LockedOwnership") - if err != nil { - return nil, err - } - return &WalletLockedOwnershipIterator{contract: _Wallet.contract, event: "LockedOwnership", logs: logs, sub: sub}, nil -} - -// WatchLockedOwnership is a free log subscription operation binding the contract event 0x808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec122. -// -// Solidity: event LockedOwnership(address _locked) -func (_Wallet *WalletFilterer) WatchLockedOwnership(opts *bind.WatchOpts, sink chan<- *WalletLockedOwnership) (event.Subscription, error) { - - logs, sub, err := _Wallet.contract.WatchLogs(opts, "LockedOwnership") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(WalletLockedOwnership) - if err := _Wallet.contract.UnpackLog(event, "LockedOwnership", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseLockedOwnership is a log parse operation binding the contract event 0x808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec122. -// -// Solidity: event LockedOwnership(address _locked) -func (_Wallet *WalletFilterer) ParseLockedOwnership(log types.Log) (*WalletLockedOwnership, error) { - event := new(WalletLockedOwnership) - if err := _Wallet.contract.UnpackLog(event, "LockedOwnership", log); err != nil { - return nil, err - } - return event, nil -} - -// WalletRemovedFromWhitelistIterator is returned from FilterRemovedFromWhitelist and is used to iterate over the raw logs and unpacked data for RemovedFromWhitelist events raised by the Wallet contract. -type WalletRemovedFromWhitelistIterator struct { - Event *WalletRemovedFromWhitelist // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *WalletRemovedFromWhitelistIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(WalletRemovedFromWhitelist) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(WalletRemovedFromWhitelist) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletRemovedFromWhitelistIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *WalletRemovedFromWhitelistIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// WalletRemovedFromWhitelist represents a RemovedFromWhitelist event raised by the Wallet contract. -type WalletRemovedFromWhitelist struct { - Sender common.Address - Addresses []common.Address - Raw types.Log // Blockchain specific contextual infos +// WalletLoadedTokenCard represents a LoadedTokenCard event raised by the Wallet contract. +type WalletLoadedTokenCard struct { + Asset common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterRemovedFromWhitelist is a free log retrieval operation binding the contract event 0xd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b. +// FilterLoadedTokenCard is a free log retrieval operation binding the contract event 0x5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a. // -// Solidity: event RemovedFromWhitelist(address _sender, address[] _addresses) -func (_Wallet *WalletFilterer) FilterRemovedFromWhitelist(opts *bind.FilterOpts) (*WalletRemovedFromWhitelistIterator, error) { +// Solidity: event LoadedTokenCard(address _asset, uint256 _amount) +func (_Wallet *WalletFilterer) FilterLoadedTokenCard(opts *bind.FilterOpts) (*WalletLoadedTokenCardIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "RemovedFromWhitelist") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "LoadedTokenCard") if err != nil { return nil, err } - return &WalletRemovedFromWhitelistIterator{contract: _Wallet.contract, event: "RemovedFromWhitelist", logs: logs, sub: sub}, nil + return &WalletLoadedTokenCardIterator{contract: _Wallet.contract, event: "LoadedTokenCard", logs: logs, sub: sub}, nil } -// WatchRemovedFromWhitelist is a free log subscription operation binding the contract event 0xd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b. +// WatchLoadedTokenCard is a free log subscription operation binding the contract event 0x5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a. // -// Solidity: event RemovedFromWhitelist(address _sender, address[] _addresses) -func (_Wallet *WalletFilterer) WatchRemovedFromWhitelist(opts *bind.WatchOpts, sink chan<- *WalletRemovedFromWhitelist) (event.Subscription, error) { +// Solidity: event LoadedTokenCard(address _asset, uint256 _amount) +func (_Wallet *WalletFilterer) WatchLoadedTokenCard(opts *bind.WatchOpts, sink chan<- *WalletLoadedTokenCard) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "RemovedFromWhitelist") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "LoadedTokenCard") if err != nil { return nil, err } @@ -2793,8 +2395,8 @@ func (_Wallet *WalletFilterer) WatchRemovedFromWhitelist(opts *bind.WatchOpts, s select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletRemovedFromWhitelist) - if err := _Wallet.contract.UnpackLog(event, "RemovedFromWhitelist", log); err != nil { + event := new(WalletLoadedTokenCard) + if err := _Wallet.contract.UnpackLog(event, "LoadedTokenCard", log); err != nil { return err } event.Raw = log @@ -2815,20 +2417,20 @@ func (_Wallet *WalletFilterer) WatchRemovedFromWhitelist(opts *bind.WatchOpts, s }), nil } -// ParseRemovedFromWhitelist is a log parse operation binding the contract event 0xd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b. +// ParseLoadedTokenCard is a log parse operation binding the contract event 0x5f65674bec9af81f71be68674135a0ea3f163fb91984e3893d06da9f6ea2ce8a. // -// Solidity: event RemovedFromWhitelist(address _sender, address[] _addresses) -func (_Wallet *WalletFilterer) ParseRemovedFromWhitelist(log types.Log) (*WalletRemovedFromWhitelist, error) { - event := new(WalletRemovedFromWhitelist) - if err := _Wallet.contract.UnpackLog(event, "RemovedFromWhitelist", log); err != nil { +// Solidity: event LoadedTokenCard(address _asset, uint256 _amount) +func (_Wallet *WalletFilterer) ParseLoadedTokenCard(log types.Log) (*WalletLoadedTokenCard, error) { + event := new(WalletLoadedTokenCard) + if err := _Wallet.contract.UnpackLog(event, "LoadedTokenCard", log); err != nil { return nil, err } return event, nil } -// WalletSetGasTopUpLimitIterator is returned from FilterSetGasTopUpLimit and is used to iterate over the raw logs and unpacked data for SetGasTopUpLimit events raised by the Wallet contract. -type WalletSetGasTopUpLimitIterator struct { - Event *WalletSetGasTopUpLimit // Event containing the contract specifics and raw log +// WalletLockedOwnershipIterator is returned from FilterLockedOwnership and is used to iterate over the raw logs and unpacked data for LockedOwnership events raised by the Wallet contract. +type WalletLockedOwnershipIterator struct { + Event *WalletLockedOwnership // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2842,7 +2444,7 @@ type WalletSetGasTopUpLimitIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletSetGasTopUpLimitIterator) Next() bool { +func (it *WalletLockedOwnershipIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2851,7 +2453,7 @@ func (it *WalletSetGasTopUpLimitIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletSetGasTopUpLimit) + it.Event = new(WalletLockedOwnership) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2866,7 +2468,7 @@ func (it *WalletSetGasTopUpLimitIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletSetGasTopUpLimit) + it.Event = new(WalletLockedOwnership) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2882,42 +2484,41 @@ func (it *WalletSetGasTopUpLimitIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletSetGasTopUpLimitIterator) Error() error { +func (it *WalletLockedOwnershipIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletSetGasTopUpLimitIterator) Close() error { +func (it *WalletLockedOwnershipIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletSetGasTopUpLimit represents a SetGasTopUpLimit event raised by the Wallet contract. -type WalletSetGasTopUpLimit struct { - Sender common.Address - Amount *big.Int +// WalletLockedOwnership represents a LockedOwnership event raised by the Wallet contract. +type WalletLockedOwnership struct { + Locked common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterSetGasTopUpLimit is a free log retrieval operation binding the contract event 0x41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e. +// FilterLockedOwnership is a free log retrieval operation binding the contract event 0x808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec122. // -// Solidity: event SetGasTopUpLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) FilterSetGasTopUpLimit(opts *bind.FilterOpts) (*WalletSetGasTopUpLimitIterator, error) { +// Solidity: event LockedOwnership(address _locked) +func (_Wallet *WalletFilterer) FilterLockedOwnership(opts *bind.FilterOpts) (*WalletLockedOwnershipIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "SetGasTopUpLimit") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "LockedOwnership") if err != nil { return nil, err } - return &WalletSetGasTopUpLimitIterator{contract: _Wallet.contract, event: "SetGasTopUpLimit", logs: logs, sub: sub}, nil + return &WalletLockedOwnershipIterator{contract: _Wallet.contract, event: "LockedOwnership", logs: logs, sub: sub}, nil } -// WatchSetGasTopUpLimit is a free log subscription operation binding the contract event 0x41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e. +// WatchLockedOwnership is a free log subscription operation binding the contract event 0x808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec122. // -// Solidity: event SetGasTopUpLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) WatchSetGasTopUpLimit(opts *bind.WatchOpts, sink chan<- *WalletSetGasTopUpLimit) (event.Subscription, error) { +// Solidity: event LockedOwnership(address _locked) +func (_Wallet *WalletFilterer) WatchLockedOwnership(opts *bind.WatchOpts, sink chan<- *WalletLockedOwnership) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "SetGasTopUpLimit") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "LockedOwnership") if err != nil { return nil, err } @@ -2927,8 +2528,8 @@ func (_Wallet *WalletFilterer) WatchSetGasTopUpLimit(opts *bind.WatchOpts, sink select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletSetGasTopUpLimit) - if err := _Wallet.contract.UnpackLog(event, "SetGasTopUpLimit", log); err != nil { + event := new(WalletLockedOwnership) + if err := _Wallet.contract.UnpackLog(event, "LockedOwnership", log); err != nil { return err } event.Raw = log @@ -2949,20 +2550,20 @@ func (_Wallet *WalletFilterer) WatchSetGasTopUpLimit(opts *bind.WatchOpts, sink }), nil } -// ParseSetGasTopUpLimit is a log parse operation binding the contract event 0x41ff5d5ce3b7935893a4e7269ec5caae9cca5e3bf0eb4b21d2f443489667112e. +// ParseLockedOwnership is a log parse operation binding the contract event 0x808639ff9c8e4732d60b6c2330de498035416d229f27a77d259680895efec122. // -// Solidity: event SetGasTopUpLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) ParseSetGasTopUpLimit(log types.Log) (*WalletSetGasTopUpLimit, error) { - event := new(WalletSetGasTopUpLimit) - if err := _Wallet.contract.UnpackLog(event, "SetGasTopUpLimit", log); err != nil { +// Solidity: event LockedOwnership(address _locked) +func (_Wallet *WalletFilterer) ParseLockedOwnership(log types.Log) (*WalletLockedOwnership, error) { + event := new(WalletLockedOwnership) + if err := _Wallet.contract.UnpackLog(event, "LockedOwnership", log); err != nil { return nil, err } return event, nil } -// WalletSetLoadLimitIterator is returned from FilterSetLoadLimit and is used to iterate over the raw logs and unpacked data for SetLoadLimit events raised by the Wallet contract. -type WalletSetLoadLimitIterator struct { - Event *WalletSetLoadLimit // Event containing the contract specifics and raw log +// WalletRemovedFromWhitelistIterator is returned from FilterRemovedFromWhitelist and is used to iterate over the raw logs and unpacked data for RemovedFromWhitelist events raised by the Wallet contract. +type WalletRemovedFromWhitelistIterator struct { + Event *WalletRemovedFromWhitelist // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2976,7 +2577,7 @@ type WalletSetLoadLimitIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletSetLoadLimitIterator) Next() bool { +func (it *WalletRemovedFromWhitelistIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2985,7 +2586,7 @@ func (it *WalletSetLoadLimitIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletSetLoadLimit) + it.Event = new(WalletRemovedFromWhitelist) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3000,7 +2601,7 @@ func (it *WalletSetLoadLimitIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletSetLoadLimit) + it.Event = new(WalletRemovedFromWhitelist) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3016,42 +2617,42 @@ func (it *WalletSetLoadLimitIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletSetLoadLimitIterator) Error() error { +func (it *WalletRemovedFromWhitelistIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletSetLoadLimitIterator) Close() error { +func (it *WalletRemovedFromWhitelistIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletSetLoadLimit represents a SetLoadLimit event raised by the Wallet contract. -type WalletSetLoadLimit struct { - Sender common.Address - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos +// WalletRemovedFromWhitelist represents a RemovedFromWhitelist event raised by the Wallet contract. +type WalletRemovedFromWhitelist struct { + Sender common.Address + Addresses []common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterSetLoadLimit is a free log retrieval operation binding the contract event 0x0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef. +// FilterRemovedFromWhitelist is a free log retrieval operation binding the contract event 0xd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b. // -// Solidity: event SetLoadLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) FilterSetLoadLimit(opts *bind.FilterOpts) (*WalletSetLoadLimitIterator, error) { +// Solidity: event RemovedFromWhitelist(address _sender, address[] _addresses) +func (_Wallet *WalletFilterer) FilterRemovedFromWhitelist(opts *bind.FilterOpts) (*WalletRemovedFromWhitelistIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "SetLoadLimit") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "RemovedFromWhitelist") if err != nil { return nil, err } - return &WalletSetLoadLimitIterator{contract: _Wallet.contract, event: "SetLoadLimit", logs: logs, sub: sub}, nil + return &WalletRemovedFromWhitelistIterator{contract: _Wallet.contract, event: "RemovedFromWhitelist", logs: logs, sub: sub}, nil } -// WatchSetLoadLimit is a free log subscription operation binding the contract event 0x0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef. +// WatchRemovedFromWhitelist is a free log subscription operation binding the contract event 0xd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b. // -// Solidity: event SetLoadLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) WatchSetLoadLimit(opts *bind.WatchOpts, sink chan<- *WalletSetLoadLimit) (event.Subscription, error) { +// Solidity: event RemovedFromWhitelist(address _sender, address[] _addresses) +func (_Wallet *WalletFilterer) WatchRemovedFromWhitelist(opts *bind.WatchOpts, sink chan<- *WalletRemovedFromWhitelist) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "SetLoadLimit") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "RemovedFromWhitelist") if err != nil { return nil, err } @@ -3061,8 +2662,8 @@ func (_Wallet *WalletFilterer) WatchSetLoadLimit(opts *bind.WatchOpts, sink chan select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletSetLoadLimit) - if err := _Wallet.contract.UnpackLog(event, "SetLoadLimit", log); err != nil { + event := new(WalletRemovedFromWhitelist) + if err := _Wallet.contract.UnpackLog(event, "RemovedFromWhitelist", log); err != nil { return err } event.Raw = log @@ -3083,20 +2684,20 @@ func (_Wallet *WalletFilterer) WatchSetLoadLimit(opts *bind.WatchOpts, sink chan }), nil } -// ParseSetLoadLimit is a log parse operation binding the contract event 0x0b05243483e17c3f3377aee82b7d47e5700b48288695fc08b7ecc2759afa44ef. +// ParseRemovedFromWhitelist is a log parse operation binding the contract event 0xd218c430fa348f4ce67791021b6b89c0c3eacd4ead1d8f5b83c60038ec28249b. // -// Solidity: event SetLoadLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) ParseSetLoadLimit(log types.Log) (*WalletSetLoadLimit, error) { - event := new(WalletSetLoadLimit) - if err := _Wallet.contract.UnpackLog(event, "SetLoadLimit", log); err != nil { +// Solidity: event RemovedFromWhitelist(address _sender, address[] _addresses) +func (_Wallet *WalletFilterer) ParseRemovedFromWhitelist(log types.Log) (*WalletRemovedFromWhitelist, error) { + event := new(WalletRemovedFromWhitelist) + if err := _Wallet.contract.UnpackLog(event, "RemovedFromWhitelist", log); err != nil { return nil, err } return event, nil } -// WalletSetSpendLimitIterator is returned from FilterSetSpendLimit and is used to iterate over the raw logs and unpacked data for SetSpendLimit events raised by the Wallet contract. -type WalletSetSpendLimitIterator struct { - Event *WalletSetSpendLimit // Event containing the contract specifics and raw log +// WalletSetDailyLimitIterator is returned from FilterSetDailyLimit and is used to iterate over the raw logs and unpacked data for SetDailyLimit events raised by the Wallet contract. +type WalletSetDailyLimitIterator struct { + Event *WalletSetDailyLimit // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3110,7 +2711,7 @@ type WalletSetSpendLimitIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletSetSpendLimitIterator) Next() bool { +func (it *WalletSetDailyLimitIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3119,7 +2720,7 @@ func (it *WalletSetSpendLimitIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletSetSpendLimit) + it.Event = new(WalletSetDailyLimit) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3134,7 +2735,7 @@ func (it *WalletSetSpendLimitIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletSetSpendLimit) + it.Event = new(WalletSetDailyLimit) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3150,42 +2751,42 @@ func (it *WalletSetSpendLimitIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletSetSpendLimitIterator) Error() error { +func (it *WalletSetDailyLimitIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletSetSpendLimitIterator) Close() error { +func (it *WalletSetDailyLimitIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletSetSpendLimit represents a SetSpendLimit event raised by the Wallet contract. -type WalletSetSpendLimit struct { +// WalletSetDailyLimit represents a SetDailyLimit event raised by the Wallet contract. +type WalletSetDailyLimit struct { Sender common.Address Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSetSpendLimit is a free log retrieval operation binding the contract event 0x068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21. +// FilterSetDailyLimit is a free log retrieval operation binding the contract event 0x2a843f39f13315c4c1a9bc53a1a32162858f272f3b2d0c656f409431251b6768. // -// Solidity: event SetSpendLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) FilterSetSpendLimit(opts *bind.FilterOpts) (*WalletSetSpendLimitIterator, error) { +// Solidity: event SetDailyLimit(address _sender, uint256 _amount) +func (_Wallet *WalletFilterer) FilterSetDailyLimit(opts *bind.FilterOpts) (*WalletSetDailyLimitIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "SetSpendLimit") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "SetDailyLimit") if err != nil { return nil, err } - return &WalletSetSpendLimitIterator{contract: _Wallet.contract, event: "SetSpendLimit", logs: logs, sub: sub}, nil + return &WalletSetDailyLimitIterator{contract: _Wallet.contract, event: "SetDailyLimit", logs: logs, sub: sub}, nil } -// WatchSetSpendLimit is a free log subscription operation binding the contract event 0x068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21. +// WatchSetDailyLimit is a free log subscription operation binding the contract event 0x2a843f39f13315c4c1a9bc53a1a32162858f272f3b2d0c656f409431251b6768. // -// Solidity: event SetSpendLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) WatchSetSpendLimit(opts *bind.WatchOpts, sink chan<- *WalletSetSpendLimit) (event.Subscription, error) { +// Solidity: event SetDailyLimit(address _sender, uint256 _amount) +func (_Wallet *WalletFilterer) WatchSetDailyLimit(opts *bind.WatchOpts, sink chan<- *WalletSetDailyLimit) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "SetSpendLimit") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "SetDailyLimit") if err != nil { return nil, err } @@ -3195,8 +2796,8 @@ func (_Wallet *WalletFilterer) WatchSetSpendLimit(opts *bind.WatchOpts, sink cha select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletSetSpendLimit) - if err := _Wallet.contract.UnpackLog(event, "SetSpendLimit", log); err != nil { + event := new(WalletSetDailyLimit) + if err := _Wallet.contract.UnpackLog(event, "SetDailyLimit", log); err != nil { return err } event.Raw = log @@ -3217,20 +2818,20 @@ func (_Wallet *WalletFilterer) WatchSetSpendLimit(opts *bind.WatchOpts, sink cha }), nil } -// ParseSetSpendLimit is a log parse operation binding the contract event 0x068f112e5ec923d412be64779fe69e0fcbb6784c6617e94cccc8fd348f2e0f21. +// ParseSetDailyLimit is a log parse operation binding the contract event 0x2a843f39f13315c4c1a9bc53a1a32162858f272f3b2d0c656f409431251b6768. // -// Solidity: event SetSpendLimit(address _sender, uint256 _amount) -func (_Wallet *WalletFilterer) ParseSetSpendLimit(log types.Log) (*WalletSetSpendLimit, error) { - event := new(WalletSetSpendLimit) - if err := _Wallet.contract.UnpackLog(event, "SetSpendLimit", log); err != nil { +// Solidity: event SetDailyLimit(address _sender, uint256 _amount) +func (_Wallet *WalletFilterer) ParseSetDailyLimit(log types.Log) (*WalletSetDailyLimit, error) { + event := new(WalletSetDailyLimit) + if err := _Wallet.contract.UnpackLog(event, "SetDailyLimit", log); err != nil { return nil, err } return event, nil } -// WalletSubmittedGasTopUpLimitUpdateIterator is returned from FilterSubmittedGasTopUpLimitUpdate and is used to iterate over the raw logs and unpacked data for SubmittedGasTopUpLimitUpdate events raised by the Wallet contract. -type WalletSubmittedGasTopUpLimitUpdateIterator struct { - Event *WalletSubmittedGasTopUpLimitUpdate // Event containing the contract specifics and raw log +// WalletSetMonolith2FAIterator is returned from FilterSetMonolith2FA and is used to iterate over the raw logs and unpacked data for SetMonolith2FA events raised by the Wallet contract. +type WalletSetMonolith2FAIterator struct { + Event *WalletSetMonolith2FA // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3244,7 +2845,7 @@ type WalletSubmittedGasTopUpLimitUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletSubmittedGasTopUpLimitUpdateIterator) Next() bool { +func (it *WalletSetMonolith2FAIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3253,7 +2854,7 @@ func (it *WalletSubmittedGasTopUpLimitUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletSubmittedGasTopUpLimitUpdate) + it.Event = new(WalletSetMonolith2FA) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3268,7 +2869,7 @@ func (it *WalletSubmittedGasTopUpLimitUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletSubmittedGasTopUpLimitUpdate) + it.Event = new(WalletSetMonolith2FA) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3284,41 +2885,41 @@ func (it *WalletSubmittedGasTopUpLimitUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletSubmittedGasTopUpLimitUpdateIterator) Error() error { +func (it *WalletSetMonolith2FAIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletSubmittedGasTopUpLimitUpdateIterator) Close() error { +func (it *WalletSetMonolith2FAIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletSubmittedGasTopUpLimitUpdate represents a SubmittedGasTopUpLimitUpdate event raised by the Wallet contract. -type WalletSubmittedGasTopUpLimitUpdate struct { - Amount *big.Int +// WalletSetMonolith2FA represents a SetMonolith2FA event raised by the Wallet contract. +type WalletSetMonolith2FA struct { + Sender common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterSubmittedGasTopUpLimitUpdate is a free log retrieval operation binding the contract event 0xaf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c. +// FilterSetMonolith2FA is a free log retrieval operation binding the contract event 0xea0cce48757f6b222f91e711f59a5a8ec05a3ed3c0a4328fe36cb48f31a86969. // -// Solidity: event SubmittedGasTopUpLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) FilterSubmittedGasTopUpLimitUpdate(opts *bind.FilterOpts) (*WalletSubmittedGasTopUpLimitUpdateIterator, error) { +// Solidity: event SetMonolith2FA(address _sender) +func (_Wallet *WalletFilterer) FilterSetMonolith2FA(opts *bind.FilterOpts) (*WalletSetMonolith2FAIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "SubmittedGasTopUpLimitUpdate") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "SetMonolith2FA") if err != nil { return nil, err } - return &WalletSubmittedGasTopUpLimitUpdateIterator{contract: _Wallet.contract, event: "SubmittedGasTopUpLimitUpdate", logs: logs, sub: sub}, nil + return &WalletSetMonolith2FAIterator{contract: _Wallet.contract, event: "SetMonolith2FA", logs: logs, sub: sub}, nil } -// WatchSubmittedGasTopUpLimitUpdate is a free log subscription operation binding the contract event 0xaf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c. +// WatchSetMonolith2FA is a free log subscription operation binding the contract event 0xea0cce48757f6b222f91e711f59a5a8ec05a3ed3c0a4328fe36cb48f31a86969. // -// Solidity: event SubmittedGasTopUpLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) WatchSubmittedGasTopUpLimitUpdate(opts *bind.WatchOpts, sink chan<- *WalletSubmittedGasTopUpLimitUpdate) (event.Subscription, error) { +// Solidity: event SetMonolith2FA(address _sender) +func (_Wallet *WalletFilterer) WatchSetMonolith2FA(opts *bind.WatchOpts, sink chan<- *WalletSetMonolith2FA) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "SubmittedGasTopUpLimitUpdate") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "SetMonolith2FA") if err != nil { return nil, err } @@ -3328,8 +2929,8 @@ func (_Wallet *WalletFilterer) WatchSubmittedGasTopUpLimitUpdate(opts *bind.Watc select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletSubmittedGasTopUpLimitUpdate) - if err := _Wallet.contract.UnpackLog(event, "SubmittedGasTopUpLimitUpdate", log); err != nil { + event := new(WalletSetMonolith2FA) + if err := _Wallet.contract.UnpackLog(event, "SetMonolith2FA", log); err != nil { return err } event.Raw = log @@ -3350,20 +2951,20 @@ func (_Wallet *WalletFilterer) WatchSubmittedGasTopUpLimitUpdate(opts *bind.Watc }), nil } -// ParseSubmittedGasTopUpLimitUpdate is a log parse operation binding the contract event 0xaf2a77cd04c3cc155588dd3bf67b310ab4fb3b1da3cf6b8d7d4d2aa1d09b794c. +// ParseSetMonolith2FA is a log parse operation binding the contract event 0xea0cce48757f6b222f91e711f59a5a8ec05a3ed3c0a4328fe36cb48f31a86969. // -// Solidity: event SubmittedGasTopUpLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) ParseSubmittedGasTopUpLimitUpdate(log types.Log) (*WalletSubmittedGasTopUpLimitUpdate, error) { - event := new(WalletSubmittedGasTopUpLimitUpdate) - if err := _Wallet.contract.UnpackLog(event, "SubmittedGasTopUpLimitUpdate", log); err != nil { +// Solidity: event SetMonolith2FA(address _sender) +func (_Wallet *WalletFilterer) ParseSetMonolith2FA(log types.Log) (*WalletSetMonolith2FA, error) { + event := new(WalletSetMonolith2FA) + if err := _Wallet.contract.UnpackLog(event, "SetMonolith2FA", log); err != nil { return nil, err } return event, nil } -// WalletSubmittedLoadLimitUpdateIterator is returned from FilterSubmittedLoadLimitUpdate and is used to iterate over the raw logs and unpacked data for SubmittedLoadLimitUpdate events raised by the Wallet contract. -type WalletSubmittedLoadLimitUpdateIterator struct { - Event *WalletSubmittedLoadLimitUpdate // Event containing the contract specifics and raw log +// WalletSetPersonal2FAIterator is returned from FilterSetPersonal2FA and is used to iterate over the raw logs and unpacked data for SetPersonal2FA events raised by the Wallet contract. +type WalletSetPersonal2FAIterator struct { + Event *WalletSetPersonal2FA // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3377,7 +2978,7 @@ type WalletSubmittedLoadLimitUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletSubmittedLoadLimitUpdateIterator) Next() bool { +func (it *WalletSetPersonal2FAIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3386,7 +2987,7 @@ func (it *WalletSubmittedLoadLimitUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletSubmittedLoadLimitUpdate) + it.Event = new(WalletSetPersonal2FA) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3401,7 +3002,7 @@ func (it *WalletSubmittedLoadLimitUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletSubmittedLoadLimitUpdate) + it.Event = new(WalletSetPersonal2FA) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3417,41 +3018,42 @@ func (it *WalletSubmittedLoadLimitUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletSubmittedLoadLimitUpdateIterator) Error() error { +func (it *WalletSetPersonal2FAIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletSubmittedLoadLimitUpdateIterator) Close() error { +func (it *WalletSetPersonal2FAIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletSubmittedLoadLimitUpdate represents a SubmittedLoadLimitUpdate event raised by the Wallet contract. -type WalletSubmittedLoadLimitUpdate struct { - Amount *big.Int +// WalletSetPersonal2FA represents a SetPersonal2FA event raised by the Wallet contract. +type WalletSetPersonal2FA struct { + Sender common.Address + P2FA common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterSubmittedLoadLimitUpdate is a free log retrieval operation binding the contract event 0xc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d10. +// FilterSetPersonal2FA is a free log retrieval operation binding the contract event 0x33635a1d7938fa110d60d48b4ecbefc4afcc07e782ca013f11de948ee7949d1c. // -// Solidity: event SubmittedLoadLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) FilterSubmittedLoadLimitUpdate(opts *bind.FilterOpts) (*WalletSubmittedLoadLimitUpdateIterator, error) { +// Solidity: event SetPersonal2FA(address _sender, address _p2FA) +func (_Wallet *WalletFilterer) FilterSetPersonal2FA(opts *bind.FilterOpts) (*WalletSetPersonal2FAIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "SubmittedLoadLimitUpdate") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "SetPersonal2FA") if err != nil { return nil, err } - return &WalletSubmittedLoadLimitUpdateIterator{contract: _Wallet.contract, event: "SubmittedLoadLimitUpdate", logs: logs, sub: sub}, nil + return &WalletSetPersonal2FAIterator{contract: _Wallet.contract, event: "SetPersonal2FA", logs: logs, sub: sub}, nil } -// WatchSubmittedLoadLimitUpdate is a free log subscription operation binding the contract event 0xc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d10. +// WatchSetPersonal2FA is a free log subscription operation binding the contract event 0x33635a1d7938fa110d60d48b4ecbefc4afcc07e782ca013f11de948ee7949d1c. // -// Solidity: event SubmittedLoadLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) WatchSubmittedLoadLimitUpdate(opts *bind.WatchOpts, sink chan<- *WalletSubmittedLoadLimitUpdate) (event.Subscription, error) { +// Solidity: event SetPersonal2FA(address _sender, address _p2FA) +func (_Wallet *WalletFilterer) WatchSetPersonal2FA(opts *bind.WatchOpts, sink chan<- *WalletSetPersonal2FA) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "SubmittedLoadLimitUpdate") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "SetPersonal2FA") if err != nil { return nil, err } @@ -3461,8 +3063,8 @@ func (_Wallet *WalletFilterer) WatchSubmittedLoadLimitUpdate(opts *bind.WatchOpt select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletSubmittedLoadLimitUpdate) - if err := _Wallet.contract.UnpackLog(event, "SubmittedLoadLimitUpdate", log); err != nil { + event := new(WalletSetPersonal2FA) + if err := _Wallet.contract.UnpackLog(event, "SetPersonal2FA", log); err != nil { return err } event.Raw = log @@ -3483,20 +3085,20 @@ func (_Wallet *WalletFilterer) WatchSubmittedLoadLimitUpdate(opts *bind.WatchOpt }), nil } -// ParseSubmittedLoadLimitUpdate is a log parse operation binding the contract event 0xc178d379965e5657b6fc57494e392f121a14119215dfb422aad7db4cc03f2d10. +// ParseSetPersonal2FA is a log parse operation binding the contract event 0x33635a1d7938fa110d60d48b4ecbefc4afcc07e782ca013f11de948ee7949d1c. // -// Solidity: event SubmittedLoadLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) ParseSubmittedLoadLimitUpdate(log types.Log) (*WalletSubmittedLoadLimitUpdate, error) { - event := new(WalletSubmittedLoadLimitUpdate) - if err := _Wallet.contract.UnpackLog(event, "SubmittedLoadLimitUpdate", log); err != nil { +// Solidity: event SetPersonal2FA(address _sender, address _p2FA) +func (_Wallet *WalletFilterer) ParseSetPersonal2FA(log types.Log) (*WalletSetPersonal2FA, error) { + event := new(WalletSetPersonal2FA) + if err := _Wallet.contract.UnpackLog(event, "SetPersonal2FA", log); err != nil { return nil, err } return event, nil } -// WalletSubmittedSpendLimitUpdateIterator is returned from FilterSubmittedSpendLimitUpdate and is used to iterate over the raw logs and unpacked data for SubmittedSpendLimitUpdate events raised by the Wallet contract. -type WalletSubmittedSpendLimitUpdateIterator struct { - Event *WalletSubmittedSpendLimitUpdate // Event containing the contract specifics and raw log +// WalletSubmittedDailyLimitUpdateIterator is returned from FilterSubmittedDailyLimitUpdate and is used to iterate over the raw logs and unpacked data for SubmittedDailyLimitUpdate events raised by the Wallet contract. +type WalletSubmittedDailyLimitUpdateIterator struct { + Event *WalletSubmittedDailyLimitUpdate // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3510,7 +3112,7 @@ type WalletSubmittedSpendLimitUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *WalletSubmittedSpendLimitUpdateIterator) Next() bool { +func (it *WalletSubmittedDailyLimitUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3519,7 +3121,7 @@ func (it *WalletSubmittedSpendLimitUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(WalletSubmittedSpendLimitUpdate) + it.Event = new(WalletSubmittedDailyLimitUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3534,7 +3136,7 @@ func (it *WalletSubmittedSpendLimitUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(WalletSubmittedSpendLimitUpdate) + it.Event = new(WalletSubmittedDailyLimitUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3550,41 +3152,41 @@ func (it *WalletSubmittedSpendLimitUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *WalletSubmittedSpendLimitUpdateIterator) Error() error { +func (it *WalletSubmittedDailyLimitUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *WalletSubmittedSpendLimitUpdateIterator) Close() error { +func (it *WalletSubmittedDailyLimitUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// WalletSubmittedSpendLimitUpdate represents a SubmittedSpendLimitUpdate event raised by the Wallet contract. -type WalletSubmittedSpendLimitUpdate struct { +// WalletSubmittedDailyLimitUpdate represents a SubmittedDailyLimitUpdate event raised by the Wallet contract. +type WalletSubmittedDailyLimitUpdate struct { Amount *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSubmittedSpendLimitUpdate is a free log retrieval operation binding the contract event 0x4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da91. +// FilterSubmittedDailyLimitUpdate is a free log retrieval operation binding the contract event 0x065b9ade648867cf901516060dd7a78fad8ab1aec5eb80ee57acbb30badf86ec. // -// Solidity: event SubmittedSpendLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) FilterSubmittedSpendLimitUpdate(opts *bind.FilterOpts) (*WalletSubmittedSpendLimitUpdateIterator, error) { +// Solidity: event SubmittedDailyLimitUpdate(uint256 _amount) +func (_Wallet *WalletFilterer) FilterSubmittedDailyLimitUpdate(opts *bind.FilterOpts) (*WalletSubmittedDailyLimitUpdateIterator, error) { - logs, sub, err := _Wallet.contract.FilterLogs(opts, "SubmittedSpendLimitUpdate") + logs, sub, err := _Wallet.contract.FilterLogs(opts, "SubmittedDailyLimitUpdate") if err != nil { return nil, err } - return &WalletSubmittedSpendLimitUpdateIterator{contract: _Wallet.contract, event: "SubmittedSpendLimitUpdate", logs: logs, sub: sub}, nil + return &WalletSubmittedDailyLimitUpdateIterator{contract: _Wallet.contract, event: "SubmittedDailyLimitUpdate", logs: logs, sub: sub}, nil } -// WatchSubmittedSpendLimitUpdate is a free log subscription operation binding the contract event 0x4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da91. +// WatchSubmittedDailyLimitUpdate is a free log subscription operation binding the contract event 0x065b9ade648867cf901516060dd7a78fad8ab1aec5eb80ee57acbb30badf86ec. // -// Solidity: event SubmittedSpendLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) WatchSubmittedSpendLimitUpdate(opts *bind.WatchOpts, sink chan<- *WalletSubmittedSpendLimitUpdate) (event.Subscription, error) { +// Solidity: event SubmittedDailyLimitUpdate(uint256 _amount) +func (_Wallet *WalletFilterer) WatchSubmittedDailyLimitUpdate(opts *bind.WatchOpts, sink chan<- *WalletSubmittedDailyLimitUpdate) (event.Subscription, error) { - logs, sub, err := _Wallet.contract.WatchLogs(opts, "SubmittedSpendLimitUpdate") + logs, sub, err := _Wallet.contract.WatchLogs(opts, "SubmittedDailyLimitUpdate") if err != nil { return nil, err } @@ -3594,8 +3196,8 @@ func (_Wallet *WalletFilterer) WatchSubmittedSpendLimitUpdate(opts *bind.WatchOp select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(WalletSubmittedSpendLimitUpdate) - if err := _Wallet.contract.UnpackLog(event, "SubmittedSpendLimitUpdate", log); err != nil { + event := new(WalletSubmittedDailyLimitUpdate) + if err := _Wallet.contract.UnpackLog(event, "SubmittedDailyLimitUpdate", log); err != nil { return err } event.Raw = log @@ -3616,12 +3218,12 @@ func (_Wallet *WalletFilterer) WatchSubmittedSpendLimitUpdate(opts *bind.WatchOp }), nil } -// ParseSubmittedSpendLimitUpdate is a log parse operation binding the contract event 0x4b1b970c8a0fa761e7803ed70c13d7aca71904b13df60fbe03f981da1730da91. +// ParseSubmittedDailyLimitUpdate is a log parse operation binding the contract event 0x065b9ade648867cf901516060dd7a78fad8ab1aec5eb80ee57acbb30badf86ec. // -// Solidity: event SubmittedSpendLimitUpdate(uint256 _amount) -func (_Wallet *WalletFilterer) ParseSubmittedSpendLimitUpdate(log types.Log) (*WalletSubmittedSpendLimitUpdate, error) { - event := new(WalletSubmittedSpendLimitUpdate) - if err := _Wallet.contract.UnpackLog(event, "SubmittedSpendLimitUpdate", log); err != nil { +// Solidity: event SubmittedDailyLimitUpdate(uint256 _amount) +func (_Wallet *WalletFilterer) ParseSubmittedDailyLimitUpdate(log types.Log) (*WalletSubmittedDailyLimitUpdate, error) { + event := new(WalletSubmittedDailyLimitUpdate) + if err := _Wallet.contract.UnpackLog(event, "SubmittedDailyLimitUpdate", log); err != nil { return nil, err } return event, nil @@ -4299,6 +3901,140 @@ func (_Wallet *WalletFilterer) ParseTransferredOwnership(log types.Log) (*Wallet return event, nil } +// WalletUpdatedAvailableDailyLimitIterator is returned from FilterUpdatedAvailableDailyLimit and is used to iterate over the raw logs and unpacked data for UpdatedAvailableDailyLimit events raised by the Wallet contract. +type WalletUpdatedAvailableDailyLimitIterator struct { + Event *WalletUpdatedAvailableDailyLimit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletUpdatedAvailableDailyLimitIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletUpdatedAvailableDailyLimit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletUpdatedAvailableDailyLimit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletUpdatedAvailableDailyLimitIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletUpdatedAvailableDailyLimitIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletUpdatedAvailableDailyLimit represents a UpdatedAvailableDailyLimit event raised by the Wallet contract. +type WalletUpdatedAvailableDailyLimit struct { + Amount *big.Int + NextReset *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedAvailableDailyLimit is a free log retrieval operation binding the contract event 0xb8d7171194501073e2d8151eeccf1398143c5df9acfb9868d0539a256164f6ca. +// +// Solidity: event UpdatedAvailableDailyLimit(uint256 _amount, uint256 _nextReset) +func (_Wallet *WalletFilterer) FilterUpdatedAvailableDailyLimit(opts *bind.FilterOpts) (*WalletUpdatedAvailableDailyLimitIterator, error) { + + logs, sub, err := _Wallet.contract.FilterLogs(opts, "UpdatedAvailableDailyLimit") + if err != nil { + return nil, err + } + return &WalletUpdatedAvailableDailyLimitIterator{contract: _Wallet.contract, event: "UpdatedAvailableDailyLimit", logs: logs, sub: sub}, nil +} + +// WatchUpdatedAvailableDailyLimit is a free log subscription operation binding the contract event 0xb8d7171194501073e2d8151eeccf1398143c5df9acfb9868d0539a256164f6ca. +// +// Solidity: event UpdatedAvailableDailyLimit(uint256 _amount, uint256 _nextReset) +func (_Wallet *WalletFilterer) WatchUpdatedAvailableDailyLimit(opts *bind.WatchOpts, sink chan<- *WalletUpdatedAvailableDailyLimit) (event.Subscription, error) { + + logs, sub, err := _Wallet.contract.WatchLogs(opts, "UpdatedAvailableDailyLimit") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletUpdatedAvailableDailyLimit) + if err := _Wallet.contract.UnpackLog(event, "UpdatedAvailableDailyLimit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedAvailableDailyLimit is a log parse operation binding the contract event 0xb8d7171194501073e2d8151eeccf1398143c5df9acfb9868d0539a256164f6ca. +// +// Solidity: event UpdatedAvailableDailyLimit(uint256 _amount, uint256 _nextReset) +func (_Wallet *WalletFilterer) ParseUpdatedAvailableDailyLimit(log types.Log) (*WalletUpdatedAvailableDailyLimit, error) { + event := new(WalletUpdatedAvailableDailyLimit) + if err := _Wallet.contract.UnpackLog(event, "UpdatedAvailableDailyLimit", log); err != nil { + return nil, err + } + return event, nil +} + // WalletUpdatedAvailableLimitIterator is returned from FilterUpdatedAvailableLimit and is used to iterate over the raw logs and unpacked data for UpdatedAvailableLimit events raised by the Wallet contract. type WalletUpdatedAvailableLimitIterator struct { Event *WalletUpdatedAvailableLimit // Event containing the contract specifics and raw log diff --git a/pkg/bindings/walletCache.go b/pkg/bindings/walletCache.go index 83c7121a..fb437f45 100644 --- a/pkg/bindings/walletCache.go +++ b/pkg/bindings/walletCache.go @@ -28,19 +28,19 @@ var ( ) // WalletCacheABI is the input ABI used to generate the binding from. -const WalletCacheABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_walletImplementation_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_defaultSpendLimit_\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_licenceNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_walletDeployerNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"addresspayable\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"CachedWallet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cacheWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"cachedWallets\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cachedWalletsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultSpendLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletCachePop\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletDeployerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" +const WalletCacheABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_walletImplementation_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_defaultDailyLimit_\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_licenceNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_tokenWhitelistNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_walletDeployerNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"addresspayable\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"CachedWallet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"cacheWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"cachedWallets\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cachedWalletsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultDailyLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"licenceNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenWhitelistNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletCachePop\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletDeployerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // WalletCacheBin is the compiled bytecode used for deploying new contracts. -var WalletCacheBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fd0ff8bd67f6e25e4e4b010df582a36a0ee9b78e49afe6cc1cff5dd5a830403306035557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966036557f1d0c0adbe6addd93659446311e0767a56b67d41ef38f0cb66dcf7560d28a5a386037553480156100c157600080fd5b50604051610c4e380380610c4e833981810160405260e08110156100e457600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949593949293919290919061011a86610173565b61012384610241565b603880546001600160a01b0319166001600160a01b0389161790556039859055821561014f5760358390555b811561015b5760368290555b80156101675760378190555b505050505050506102f4565b600054610100900460ff168061018c575061018c6102ee565b8061019a575060005460ff16155b6101d55760405162461bcd60e51b815260040180806020018281038252602e815260200180610c20602e913960400191505060405180910390fd5b600054610100900460ff16158015610200576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382161561022b57603380546001600160a01b0319166001600160a01b0384161790555b801561023d576000805461ff00191690555b5050565b600054610100900460ff168061025a575061025a6102ee565b80610268575060005460ff16155b6102a35760405162461bcd60e51b815260040180806020018281038252602e815260200180610c20602e913960400191505060405180910390fd5b600054610100900460ff161580156102ce576000805460ff1961ff0019909116610100171660011790555b811561022b576034829055801561023d576000805461ff00191690555050565b303b1590565b61091d806103036000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063877337b011610071578063877337b01461010657806387e8bed11461010e578063a4570e5114610116578063a7a7d3bc1461011e578063e2b4ce9714610126578063fc6cabe71461012e576100a9565b806360dbc5de146100ae57806371b9076a146100b8578063747c31d6146100d25780637d73b231146100da5780638117abc1146100fe575b600080fd5b6100b661014b565b005b6100c06102f5565b60408051918252519081900360200190f35b6100c06102fb565b6100e2610301565b604080516001600160a01b039092168252519081900360200190f35b6100e2610310565b6100c061031f565b6100c0610325565b6100e261032b565b6100c0610412565b6100c0610418565b6100e26004803603602081101561014457600080fd5b503561041e565b6000610158603754610445565b6038546040519192506000916001600160a01b039091169061017990610598565b6001600160a01b03909116815260406020820181905260008183018190529051918290036080019190f0801580156101b5573d6000803e3d6000fd5b509050806001600160a01b03166369efdfc08360016101d2610301565b6036546101dd610418565b6035546039546040518863ffffffff1660e01b815260040180886001600160a01b031681526020018715158152602001866001600160a01b03168152602001858152602001848152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561025757600080fd5b505af115801561026b573d6000803e3d6000fd5b5050603a80546001810182556000919091527fa2999d817b6757290b50e8ecf3fa939673403dd35c97de392fdb343b4015ce9e0180546001600160a01b0385166001600160a01b0319909116811790915560408051918252517f9ede7876a6b2454072ceeaff4b6b4e6eaa5381db241b850f2a46034136fc2e6e9350908190036020019150a15050565b603a5490565b60355481565b6033546001600160a01b031690565b6038546001600160a01b031681565b60365481565b60375481565b6000610338603754610445565b6001600160a01b0316336001600160a01b03161461039d576040805162461bcd60e51b815260206004820152601d60248201527f6e6f742063616c6c65642062792077616c6c65742d6465706c6f796572000000604482015290519081900360640190fd5b603a54600111156103b0576103b061014b565b603a80546000919060001981019081106103c657fe5b600091825260209091200154603a80546001600160a01b03909216925090806103eb57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055905090565b60395481565b60345490565b603a818154811061042b57fe5b6000918252602090912001546001600160a01b0316905081565b6033546000906001600160a01b03166104a5576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156104f157600080fd5b505afa158015610505573d6000803e3d6000fd5b505050506040513d602081101561051b57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561056657600080fd5b505afa15801561057a573d6000803e3d6000fd5b505050506040513d602081101561059057600080fd5b505192915050565b610342806105a68339019056fe60806040526040516103423803806103428339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ec826101ab565b8051156101a4576000826001600160a01b0316826040518082805190602001908083835b6020831061012f5780518252601f199092019160209182019101610110565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461018f576040519150601f19603f3d011682016040523d82523d6000602084013e610194565b606091505b50509050806101a257600080fd5b505b5050610223565b6101be8161021d60201b61009a1760201c565b6101f95760405162461bcd60e51b815260040180806020018281038252603b815260200180610307603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b151590565b60d6806102316000396000f3fe6080604052366044576040805133815234602082015281517f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874929181900390910190a1005b6050604c6052565b6077565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156095573d6000f35b3d6000fd5b3b15159056fea26469706673582212208ed6ffa1ceda73e7f2255c282c025b00bc31cb41fe1328bb37a62d3c6f61c36564736f6c634300060c003343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a26469706673582212207a01a1535ccd36f983b6c551c35eee574f22405875890a444fe668db4bbe00a364736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var WalletCacheBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557fd0ff8bd67f6e25e4e4b010df582a36a0ee9b78e49afe6cc1cff5dd5a830403306035557fe84f90570f13fe09f288f2411ff9cf50da611ed0c7db7f73d48053ffc974d3966036557f1d0c0adbe6addd93659446311e0767a56b67d41ef38f0cb66dcf7560d28a5a386037553480156100c157600080fd5b50604051610c4e380380610c4e833981810160405260e08110156100e457600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949593949293919290919061011a86610173565b61012384610241565b603880546001600160a01b0319166001600160a01b0389161790556039859055821561014f5760358390555b811561015b5760368290555b80156101675760378190555b505050505050506102f4565b600054610100900460ff168061018c575061018c6102ee565b8061019a575060005460ff16155b6101d55760405162461bcd60e51b815260040180806020018281038252602e815260200180610c20602e913960400191505060405180910390fd5b600054610100900460ff16158015610200576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382161561022b57603380546001600160a01b0319166001600160a01b0384161790555b801561023d576000805461ff00191690555b5050565b600054610100900460ff168061025a575061025a6102ee565b80610268575060005460ff16155b6102a35760405162461bcd60e51b815260040180806020018281038252602e815260200180610c20602e913960400191505060405180910390fd5b600054610100900460ff161580156102ce576000805460ff1961ff0019909116610100171660011790555b811561022b576034829055801561023d576000805461ff00191690555050565b303b1590565b61091d806103036000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063877337b011610071578063877337b01461010657806387e8bed11461010e578063a4570e5114610116578063c76b08881461011e578063e2b4ce9714610126578063fc6cabe71461012e576100a9565b806360dbc5de146100ae57806371b9076a146100b8578063747c31d6146100d25780637d73b231146100da5780638117abc1146100fe575b600080fd5b6100b661014b565b005b6100c06102f5565b60408051918252519081900360200190f35b6100c06102fb565b6100e2610301565b604080516001600160a01b039092168252519081900360200190f35b6100e2610310565b6100c061031f565b6100c0610325565b6100e261032b565b6100c0610412565b6100c0610418565b6100e26004803603602081101561014457600080fd5b503561041e565b6000610158603754610445565b6038546040519192506000916001600160a01b039091169061017990610598565b6001600160a01b03909116815260406020820181905260008183018190529051918290036080019190f0801580156101b5573d6000803e3d6000fd5b509050806001600160a01b03166369efdfc08360016101d2610301565b6036546101dd610418565b6035546039546040518863ffffffff1660e01b815260040180886001600160a01b031681526020018715158152602001866001600160a01b03168152602001858152602001848152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561025757600080fd5b505af115801561026b573d6000803e3d6000fd5b5050603a80546001810182556000919091527fa2999d817b6757290b50e8ecf3fa939673403dd35c97de392fdb343b4015ce9e0180546001600160a01b0385166001600160a01b0319909116811790915560408051918252517f9ede7876a6b2454072ceeaff4b6b4e6eaa5381db241b850f2a46034136fc2e6e9350908190036020019150a15050565b603a5490565b60355481565b6033546001600160a01b031690565b6038546001600160a01b031681565b60365481565b60375481565b6000610338603754610445565b6001600160a01b0316336001600160a01b03161461039d576040805162461bcd60e51b815260206004820152601d60248201527f6e6f742063616c6c65642062792077616c6c65742d6465706c6f796572000000604482015290519081900360640190fd5b603a54600111156103b0576103b061014b565b603a80546000919060001981019081106103c657fe5b600091825260209091200154603a80546001600160a01b03909216925090806103eb57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055905090565b60395481565b60345490565b603a818154811061042b57fe5b6000918252602090912001546001600160a01b0316905081565b6033546000906001600160a01b03166104a5576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156104f157600080fd5b505afa158015610505573d6000803e3d6000fd5b505050506040513d602081101561051b57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b15801561056657600080fd5b505afa15801561057a573d6000803e3d6000fd5b505050506040513d602081101561059057600080fd5b505192915050565b610342806105a68339019056fe60806040526040516103423803806103428339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ec826101ab565b8051156101a4576000826001600160a01b0316826040518082805190602001908083835b6020831061012f5780518252601f199092019160209182019101610110565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461018f576040519150601f19603f3d011682016040523d82523d6000602084013e610194565b606091505b50509050806101a257600080fd5b505b5050610223565b6101be8161021d60201b61009a1760201c565b6101f95760405162461bcd60e51b815260040180806020018281038252603b815260200180610307603b913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3b151590565b60d6806102316000396000f3fe6080604052366044576040805133815234602082015281517f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874929181900390910190a1005b6050604c6052565b6077565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e8080156095573d6000f35b3d6000fd5b3b15159056fea26469706673582212208ed6ffa1ceda73e7f2255c282c025b00bc31cb41fe1328bb37a62d3c6f61c36564736f6c634300060c003343616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373a2646970667358221220d5d067607b7c3377fe6ff5918c0f2ca048cf1884327a3932ad11302b6e96960f64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployWalletCache deploys a new Ethereum contract, binding an instance of WalletCache to it. -func DeployWalletCache(auth *bind.TransactOpts, backend bind.ContractBackend, _walletImplementation_ common.Address, _ens_ common.Address, _defaultSpendLimit_ *big.Int, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _tokenWhitelistNode_ [32]byte, _walletDeployerNode_ [32]byte) (common.Address, *types.Transaction, *WalletCache, error) { +func DeployWalletCache(auth *bind.TransactOpts, backend bind.ContractBackend, _walletImplementation_ common.Address, _ens_ common.Address, _defaultDailyLimit_ *big.Int, _controllerNode_ [32]byte, _licenceNode_ [32]byte, _tokenWhitelistNode_ [32]byte, _walletDeployerNode_ [32]byte) (common.Address, *types.Transaction, *WalletCache, error) { parsed, err := abi.JSON(strings.NewReader(WalletCacheABI)) if err != nil { return common.Address{}, nil, nil, err } - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(WalletCacheBin), backend, _walletImplementation_, _ens_, _defaultSpendLimit_, _controllerNode_, _licenceNode_, _tokenWhitelistNode_, _walletDeployerNode_) + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(WalletCacheBin), backend, _walletImplementation_, _ens_, _defaultDailyLimit_, _controllerNode_, _licenceNode_, _tokenWhitelistNode_, _walletDeployerNode_) if err != nil { return common.Address{}, nil, nil, err } @@ -267,30 +267,30 @@ func (_WalletCache *WalletCacheCallerSession) ControllerNode() ([32]byte, error) return _WalletCache.Contract.ControllerNode(&_WalletCache.CallOpts) } -// DefaultSpendLimit is a free data retrieval call binding the contract method 0xa7a7d3bc. +// DefaultDailyLimit is a free data retrieval call binding the contract method 0xc76b0888. // -// Solidity: function defaultSpendLimit() constant returns(uint256) -func (_WalletCache *WalletCacheCaller) DefaultSpendLimit(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function defaultDailyLimit() constant returns(uint256) +func (_WalletCache *WalletCacheCaller) DefaultDailyLimit(opts *bind.CallOpts) (*big.Int, error) { var ( ret0 = new(*big.Int) ) out := ret0 - err := _WalletCache.contract.Call(opts, out, "defaultSpendLimit") + err := _WalletCache.contract.Call(opts, out, "defaultDailyLimit") return *ret0, err } -// DefaultSpendLimit is a free data retrieval call binding the contract method 0xa7a7d3bc. +// DefaultDailyLimit is a free data retrieval call binding the contract method 0xc76b0888. // -// Solidity: function defaultSpendLimit() constant returns(uint256) -func (_WalletCache *WalletCacheSession) DefaultSpendLimit() (*big.Int, error) { - return _WalletCache.Contract.DefaultSpendLimit(&_WalletCache.CallOpts) +// Solidity: function defaultDailyLimit() constant returns(uint256) +func (_WalletCache *WalletCacheSession) DefaultDailyLimit() (*big.Int, error) { + return _WalletCache.Contract.DefaultDailyLimit(&_WalletCache.CallOpts) } -// DefaultSpendLimit is a free data retrieval call binding the contract method 0xa7a7d3bc. +// DefaultDailyLimit is a free data retrieval call binding the contract method 0xc76b0888. // -// Solidity: function defaultSpendLimit() constant returns(uint256) -func (_WalletCache *WalletCacheCallerSession) DefaultSpendLimit() (*big.Int, error) { - return _WalletCache.Contract.DefaultSpendLimit(&_WalletCache.CallOpts) +// Solidity: function defaultDailyLimit() constant returns(uint256) +func (_WalletCache *WalletCacheCallerSession) DefaultDailyLimit() (*big.Int, error) { + return _WalletCache.Contract.DefaultDailyLimit(&_WalletCache.CallOpts) } // EnsRegistry is a free data retrieval call binding the contract method 0x7d73b231. diff --git a/pkg/bindings/walletDeployer.go b/pkg/bindings/walletDeployer.go index fa3a3ccc..9ffbaae5 100644 --- a/pkg/bindings/walletDeployer.go +++ b/pkg/bindings/walletDeployer.go @@ -28,10 +28,10 @@ var ( ) // WalletDeployerABI is the input ABI used to generate the binding from. -const WalletDeployerABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_walletCacheNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"DeployedWallet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldWallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_paid\",\"type\":\"uint256\"}],\"name\":\"MigratedWallet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"deployWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deployedWallets\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_oldWallet\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_initializedSpendLimit\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_initializedGasTopUpLimit\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_initializedLoadLimit\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_initializedWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_spendLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasTopUpLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_loadLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_whitelistedAddresses\",\"type\":\"address[]\"}],\"name\":\"migrateWallet\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletCacheNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" +const WalletDeployerABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ens_\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_controllerNode_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_walletCacheNode_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"DeployedWallet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldWallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_paid\",\"type\":\"uint256\"}],\"name\":\"MigratedWallet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"controllerNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"deployWallet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deployedWallets\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ensRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_oldWallet\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_initializedDailyLimit\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_initializedWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_dailyLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_whitelistedAddresses\",\"type\":\"address[]\"}],\"name\":\"migrateWallet\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletCacheNode\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // WalletDeployerBin is the compiled bytecode used for deploying new contracts. -var WalletDeployerBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557faf553cb0d77690819f9d6fbaa04416e1fdcfa01b2a9a833c7a11e6ae0bc1be886035553480156200007a57600080fd5b5060405162000d4e38038062000d4e83398181016040526060811015620000a057600080fd5b5080516020820151604090920151909190620000bc83620000dd565b620000c782620001b4565b8015620000d45760358190555b50505062000270565b600054610100900460ff1680620000f95750620000f96200026a565b8062000108575060005460ff16155b620001455760405162461bcd60e51b815260040180806020018281038252602e81526020018062000d20602e913960400191505060405180910390fd5b600054610100900460ff1615801562000171576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216156200019d57603380546001600160a01b0319166001600160a01b0384161790555b8015620001b0576000805461ff00191690555b5050565b600054610100900460ff1680620001d05750620001d06200026a565b80620001df575060005460ff16155b6200021c5760405162461bcd60e51b815260040180806020018281038252602e81526020018062000d20602e913960400191505060405180910390fd5b600054610100900460ff1615801562000248576000805460ff1961ff0019909116610100171660011790555b81156200019d5760348290558015620001b0576000805461ff00191690555050565b303b1590565b610aa080620002806000396000f3fe6080604052600436106100555760003560e01c80637d73b2311461005a57806380a12c0e1461008b5780638d682ef7146100be578063a6ede3d414610180578063c8cc2fc2146101a7578063e2b4ce97146101da575b600080fd5b34801561006657600080fd5b5061006f6101ef565b604080516001600160a01b039092168252519081900360200190f35b34801561009757600080fd5b5061006f600480360360208110156100ae57600080fd5b50356001600160a01b03166101fe565b61017e60048036036101408110156100d557600080fd5b6001600160a01b03823581169260208101359091169160408201351515916060810135151591608082013515159160a081013515159160c08201359160e0810135916101008201359190810190610140810161012082013564010000000081111561013f57600080fd5b82018360208201111561015157600080fd5b8035906020019184602083028401116401000000008311171561017357600080fd5b509092509050610219565b005b34801561018c57600080fd5b506101956106f3565b60408051918252519081900360200190f35b3480156101b357600080fd5b5061017e600480360360208110156101ca57600080fd5b50356001600160a01b03166106f9565b3480156101e657600080fd5b50610195610897565b6033546001600160a01b031690565b6036602052600090815260409020546001600160a01b031681565b6102223361089d565b610273576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b6001600160a01b038b811660009081526036602052604090205416156102ca5760405162461bcd60e51b8152600401808060200182810382526021815260200180610a4a6021913960400191505060405180910390fd5b8a6001600160a01b03168a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561030d57600080fd5b505afa158015610321573d6000803e3d6000fd5b505050506040513d602081101561033757600080fd5b50516001600160a01b031614610385576040805162461bcd60e51b815260206004820152600e60248201526d0deeedccae440dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b6000610392603554610928565b6001600160a01b031663a4570e516040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103cc57600080fd5b505af11580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b5051604080516001600160a01b038084168252808f1660208301528f168183015234606082015290519192507fc65d6ee9571556236e352151c95c79b6589474ad814195aaac7d5ab8d88ba2dd919081900360800190a16001600160a01b038c8116600090815260366020526040902080546001600160a01b03191691831691909117905589156104e057806001600160a01b0316633c672eb7876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156104c757600080fd5b505af11580156104db573d6000803e3d6000fd5b505050505b881561054557806001600160a01b0316630f3a85d8866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561052c57600080fd5b505af1158015610540573d6000803e3d6000fd5b505050505b87156105aa57806001600160a01b0316633bfec254856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561059157600080fd5b505af11580156105a5573d6000803e3d6000fd5b505050505b861561063e57806001600160a01b031663f421764884846040518363ffffffff1660e01b815260040180806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561062557600080fd5b505af1158015610639573d6000803e3d6000fd5b505050505b60408051632c90b94d60e21b81526001600160a01b038e8116600483015260006024830181905292519084169263b242e534926044808201939182900301818387803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b5050505060003411156106e5576040516001600160a01b038d16903480156108fc02916000818181858888f193505050501580156106e3573d6000803e3d6000fd5b505b505050505050505050505050565b60355481565b6107023361089d565b610753576040805162461bcd60e51b815260206004820152601a60248201527f73656e646572206973206e6f74206120636f6e74726f6c6c6572000000000000604482015290519081900360640190fd5b6000610760603554610928565b6001600160a01b031663a4570e516040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561079a57600080fd5b505af11580156107ae573d6000803e3d6000fd5b505050506040513d60208110156107c457600080fd5b5051604080516001600160a01b0380841682528516602082015281519293507fc02db5f4164f89d90905928336769906e16d79c4a77342126eb647ca9440d078929081900390910190a16001600160a01b0382811660008181526036602052604080822080546001600160a01b03191694861694851790558051632c90b94d60e21b81526004810193909352602483018290525163b242e53492604480820193929182900301818387803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b505050505050565b60345490565b60006108aa603454610928565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156108f657600080fd5b505afa15801561090a573d6000803e3d6000fd5b505050506040513d602081101561092057600080fd5b505192915050565b6033546000906001600160a01b0316610988576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156108f657600080fdfe77616c6c657420616c7265616479206465706c6f79656420666f72206f776e6572a2646970667358221220d3b603c025674e11b442953c5e63ada8c7429a23932e6557550aafc132e761b664736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" +var WalletDeployerBin = "0x6080604052603380546001600160a01b0319166e0c2e074ec69a0dfb2997ba6c7d2e1e1790557f7f2ce995617d2816b426c5c8698c5ec2952f7a34bb10f38326f74933d58936976034557faf553cb0d77690819f9d6fbaa04416e1fdcfa01b2a9a833c7a11e6ae0bc1be8860355534801561007957600080fd5b50604051610c39380380610c398339818101604052606081101561009c57600080fd5b50805160208201516040909201519091906100b6836100d3565b6100bf826101a1565b80156100cb5760358190555b505050610254565b600054610100900460ff16806100ec57506100ec61024e565b806100fa575060005460ff16155b6101355760405162461bcd60e51b815260040180806020018281038252602e815260200180610c0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610160576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382161561018b57603380546001600160a01b0319166001600160a01b0384161790555b801561019d576000805461ff00191690555b5050565b600054610100900460ff16806101ba57506101ba61024e565b806101c8575060005460ff16155b6102035760405162461bcd60e51b815260040180806020018281038252602e815260200180610c0b602e913960400191505060405180910390fd5b600054610100900460ff1615801561022e576000805460ff1961ff0019909116610100171660011790555b811561018b576034829055801561019d576000805461ff00191690555050565b303b1590565b6109a8806102636000396000f3fe6080604052600436106100555760003560e01c80634b316f7a1461005a5780637d73b231146100fc57806380a12c0e1461012d578063a6ede3d414610160578063c8cc2fc214610187578063e2b4ce97146101ba575b600080fd5b6100fa600480360360c081101561007057600080fd5b6001600160a01b038235811692602081013590911691604082013515159160608101351515916080820135919081019060c0810160a08201356401000000008111156100bb57600080fd5b8201836020820111156100cd57600080fd5b803590602001918460208302840111640100000000831117156100ef57600080fd5b5090925090506101cf565b005b34801561010857600080fd5b506101116105d6565b604080516001600160a01b039092168252519081900360200190f35b34801561013957600080fd5b506101116004803603602081101561015057600080fd5b50356001600160a01b03166105e5565b34801561016c57600080fd5b50610175610600565b60408051918252519081900360200190f35b34801561019357600080fd5b506100fa600480360360208110156101aa57600080fd5b50356001600160a01b0316610606565b3480156101c657600080fd5b5061017561079f565b6101d8336107a5565b610224576040805162461bcd60e51b815260206004820152601860248201527739b2b73232b91034b9903737ba1031b7b73a3937b63632b960411b604482015290519081900360640190fd5b6001600160a01b03878116600090815260366020526040902054161561027b5760405162461bcd60e51b81526004018080602001828103825260218152602001806109526021913960400191505060405180910390fd5b866001600160a01b0316866001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156102be57600080fd5b505afa1580156102d2573d6000803e3d6000fd5b505050506040513d60208110156102e857600080fd5b50516001600160a01b031614610336576040805162461bcd60e51b815260206004820152600e60248201526d0deeedccae440dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b6000610343603554610830565b6001600160a01b031663a4570e516040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561037d57600080fd5b505af1158015610391573d6000803e3d6000fd5b505050506040513d60208110156103a757600080fd5b5051604080516001600160a01b038084168252808b1660208301528b168183015234606082015290519192507fc65d6ee9571556236e352151c95c79b6589474ad814195aaac7d5ab8d88ba2dd919081900360800190a16001600160a01b03888116600090815260366020526040902080546001600160a01b031916918316919091179055851561049157806001600160a01b031663458d07f2856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561047857600080fd5b505af115801561048c573d6000803e3d6000fd5b505050505b841561052557806001600160a01b031663f421764884846040518363ffffffff1660e01b815260040180806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b15801561050c57600080fd5b505af1158015610520573d6000803e3d6000fd5b505050505b60408051632c90b94d60e21b81526001600160a01b038a8116600483015260006024830181905292519084169263b242e534926044808201939182900301818387803b15801561057457600080fd5b505af1158015610588573d6000803e3d6000fd5b5050505060003411156105cc576040516001600160a01b038916903480156108fc02916000818181858888f193505050501580156105ca573d6000803e3d6000fd5b505b5050505050505050565b6033546001600160a01b031690565b6036602052600090815260409020546001600160a01b031681565b60355481565b61060f336107a5565b61065b576040805162461bcd60e51b815260206004820152601860248201527739b2b73232b91034b9903737ba1031b7b73a3937b63632b960411b604482015290519081900360640190fd5b6000610668603554610830565b6001600160a01b031663a4570e516040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b505050506040513d60208110156106cc57600080fd5b5051604080516001600160a01b0380841682528516602082015281519293507fc02db5f4164f89d90905928336769906e16d79c4a77342126eb647ca9440d078929081900390910190a16001600160a01b0382811660008181526036602052604080822080546001600160a01b03191694861694851790558051632c90b94d60e21b81526004810193909352602483018290525163b242e53492604480820193929182900301818387803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b505050505050565b60345490565b60006107b2603454610830565b6001600160a01b031663b429afeb836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156107fe57600080fd5b505afa158015610812573d6000803e3d6000fd5b505050506040513d602081101561082857600080fd5b505192915050565b6033546000906001600160a01b0316610890576040805162461bcd60e51b815260206004820152601d60248201527f454e535265736f6c7661626c65206e6f7420696e697469616c697a6564000000604482015290519081900360640190fd5b60335460408051630178b8bf60e01b81526004810185905290516001600160a01b0390921691630178b8bf91602480820192602092909190829003018186803b1580156108dc57600080fd5b505afa1580156108f0573d6000803e3d6000fd5b505050506040513d602081101561090657600080fd5b505160408051631d9dabef60e11b81526004810185905290516001600160a01b0390921691633b3b57de91602480820192602092909190829003018186803b1580156107fe57600080fdfe77616c6c657420616c7265616479206465706c6f79656420666f72206f776e6572a2646970667358221220143bda47f002828f19e8988403297f8f3148bc0b4ae33c1b1173be57cdf11bb264736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564" // DeployWalletDeployer deploys a new Ethereum contract, binding an instance of WalletDeployer to it. func DeployWalletDeployer(auth *bind.TransactOpts, backend bind.ContractBackend, _ens_ common.Address, _controllerNode_ [32]byte, _walletCacheNode_ [32]byte) (common.Address, *types.Transaction, *WalletDeployer, error) { @@ -314,25 +314,25 @@ func (_WalletDeployer *WalletDeployerTransactorSession) DeployWallet(_owner comm return _WalletDeployer.Contract.DeployWallet(&_WalletDeployer.TransactOpts, _owner) } -// MigrateWallet is a paid mutator transaction binding the contract method 0x8d682ef7. +// MigrateWallet is a paid mutator transaction binding the contract method 0x4b316f7a. // -// Solidity: function migrateWallet(address _owner, address _oldWallet, bool _initializedSpendLimit, bool _initializedGasTopUpLimit, bool _initializedLoadLimit, bool _initializedWhitelist, uint256 _spendLimit, uint256 _gasTopUpLimit, uint256 _loadLimit, address[] _whitelistedAddresses) returns() -func (_WalletDeployer *WalletDeployerTransactor) MigrateWallet(opts *bind.TransactOpts, _owner common.Address, _oldWallet common.Address, _initializedSpendLimit bool, _initializedGasTopUpLimit bool, _initializedLoadLimit bool, _initializedWhitelist bool, _spendLimit *big.Int, _gasTopUpLimit *big.Int, _loadLimit *big.Int, _whitelistedAddresses []common.Address) (*types.Transaction, error) { - return _WalletDeployer.contract.Transact(opts, "migrateWallet", _owner, _oldWallet, _initializedSpendLimit, _initializedGasTopUpLimit, _initializedLoadLimit, _initializedWhitelist, _spendLimit, _gasTopUpLimit, _loadLimit, _whitelistedAddresses) +// Solidity: function migrateWallet(address _owner, address _oldWallet, bool _initializedDailyLimit, bool _initializedWhitelist, uint256 _dailyLimit, address[] _whitelistedAddresses) returns() +func (_WalletDeployer *WalletDeployerTransactor) MigrateWallet(opts *bind.TransactOpts, _owner common.Address, _oldWallet common.Address, _initializedDailyLimit bool, _initializedWhitelist bool, _dailyLimit *big.Int, _whitelistedAddresses []common.Address) (*types.Transaction, error) { + return _WalletDeployer.contract.Transact(opts, "migrateWallet", _owner, _oldWallet, _initializedDailyLimit, _initializedWhitelist, _dailyLimit, _whitelistedAddresses) } -// MigrateWallet is a paid mutator transaction binding the contract method 0x8d682ef7. +// MigrateWallet is a paid mutator transaction binding the contract method 0x4b316f7a. // -// Solidity: function migrateWallet(address _owner, address _oldWallet, bool _initializedSpendLimit, bool _initializedGasTopUpLimit, bool _initializedLoadLimit, bool _initializedWhitelist, uint256 _spendLimit, uint256 _gasTopUpLimit, uint256 _loadLimit, address[] _whitelistedAddresses) returns() -func (_WalletDeployer *WalletDeployerSession) MigrateWallet(_owner common.Address, _oldWallet common.Address, _initializedSpendLimit bool, _initializedGasTopUpLimit bool, _initializedLoadLimit bool, _initializedWhitelist bool, _spendLimit *big.Int, _gasTopUpLimit *big.Int, _loadLimit *big.Int, _whitelistedAddresses []common.Address) (*types.Transaction, error) { - return _WalletDeployer.Contract.MigrateWallet(&_WalletDeployer.TransactOpts, _owner, _oldWallet, _initializedSpendLimit, _initializedGasTopUpLimit, _initializedLoadLimit, _initializedWhitelist, _spendLimit, _gasTopUpLimit, _loadLimit, _whitelistedAddresses) +// Solidity: function migrateWallet(address _owner, address _oldWallet, bool _initializedDailyLimit, bool _initializedWhitelist, uint256 _dailyLimit, address[] _whitelistedAddresses) returns() +func (_WalletDeployer *WalletDeployerSession) MigrateWallet(_owner common.Address, _oldWallet common.Address, _initializedDailyLimit bool, _initializedWhitelist bool, _dailyLimit *big.Int, _whitelistedAddresses []common.Address) (*types.Transaction, error) { + return _WalletDeployer.Contract.MigrateWallet(&_WalletDeployer.TransactOpts, _owner, _oldWallet, _initializedDailyLimit, _initializedWhitelist, _dailyLimit, _whitelistedAddresses) } -// MigrateWallet is a paid mutator transaction binding the contract method 0x8d682ef7. +// MigrateWallet is a paid mutator transaction binding the contract method 0x4b316f7a. // -// Solidity: function migrateWallet(address _owner, address _oldWallet, bool _initializedSpendLimit, bool _initializedGasTopUpLimit, bool _initializedLoadLimit, bool _initializedWhitelist, uint256 _spendLimit, uint256 _gasTopUpLimit, uint256 _loadLimit, address[] _whitelistedAddresses) returns() -func (_WalletDeployer *WalletDeployerTransactorSession) MigrateWallet(_owner common.Address, _oldWallet common.Address, _initializedSpendLimit bool, _initializedGasTopUpLimit bool, _initializedLoadLimit bool, _initializedWhitelist bool, _spendLimit *big.Int, _gasTopUpLimit *big.Int, _loadLimit *big.Int, _whitelistedAddresses []common.Address) (*types.Transaction, error) { - return _WalletDeployer.Contract.MigrateWallet(&_WalletDeployer.TransactOpts, _owner, _oldWallet, _initializedSpendLimit, _initializedGasTopUpLimit, _initializedLoadLimit, _initializedWhitelist, _spendLimit, _gasTopUpLimit, _loadLimit, _whitelistedAddresses) +// Solidity: function migrateWallet(address _owner, address _oldWallet, bool _initializedDailyLimit, bool _initializedWhitelist, uint256 _dailyLimit, address[] _whitelistedAddresses) returns() +func (_WalletDeployer *WalletDeployerTransactorSession) MigrateWallet(_owner common.Address, _oldWallet common.Address, _initializedDailyLimit bool, _initializedWhitelist bool, _dailyLimit *big.Int, _whitelistedAddresses []common.Address) (*types.Transaction, error) { + return _WalletDeployer.Contract.MigrateWallet(&_WalletDeployer.TransactOpts, _owner, _oldWallet, _initializedDailyLimit, _initializedWhitelist, _dailyLimit, _whitelistedAddresses) } // WalletDeployerDeployedWalletIterator is returned from FilterDeployedWallet and is used to iterate over the raw logs and unpacked data for DeployedWallet events raised by the WalletDeployer contract. diff --git a/test/controller/add_admin_test.go b/test/controller/add_admin_test.go index 14dc1be4..30b3d52b 100644 --- a/test/controller/add_admin_test.go +++ b/test/controller/add_admin_test.go @@ -47,7 +47,7 @@ var _ = Describe("addAdmin", func() { When("controller owner calls AddAdmin with it's own address", func() { - It("should fail at the already owner requirenment", func() { + It("should fail at the already owner requirement", func() { tx, err := ControllerContract.AddAdmin(ControllerOwner.TransactOpts(ethertest.WithGasLimit(100000)), ControllerOwner.Address()) Expect(err).ToNot(HaveOccurred()) Backend.Commit() @@ -59,7 +59,7 @@ var _ = Describe("addAdmin", func() { When("controller owner calls AddAdmin with controller's address", func() { - It("should fail at already controller requirenment", func() { + It("should fail at already controller requirement", func() { tx, err := ControllerContract.AddAdmin(ControllerOwner.TransactOpts(ethertest.WithGasLimit(100000)), Controller.Address()) Expect(err).ToNot(HaveOccurred()) Backend.Commit() @@ -71,7 +71,7 @@ var _ = Describe("addAdmin", func() { When("controller owner calls AddAdmin with admin's address", func() { - It("should fail at already controller requirenment", func() { + It("should fail at already controller requirement", func() { tx, err := ControllerContract.AddAdmin(ControllerOwner.TransactOpts(ethertest.WithGasLimit(100000)), ControllerAdmin.Address()) Expect(err).ToNot(HaveOccurred()) Backend.Commit() @@ -82,7 +82,7 @@ var _ = Describe("addAdmin", func() { }) When("controller owner calls AddAdmin with 0 address", func() { - It("should fail at already controller requirenment", func() { + It("should fail at already controller requirement", func() { tx, err := ControllerContract.AddAdmin(ControllerOwner.TransactOpts(ethertest.WithGasLimit(100000)), common.HexToAddress("0x0")) Expect(err).ToNot(HaveOccurred()) Backend.Commit() @@ -94,24 +94,24 @@ var _ = Describe("addAdmin", func() { When("admin calls AddAdmin with a random address", func() { - It("should fail at the not owner requirenment", func() { + It("should fail at the not owner requirement", func() { tx, err := ControllerContract.AddAdmin(ControllerAdmin.TransactOpts(ethertest.WithGasLimit(100000)), RandomAccount.Address()) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not an owner")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) }) }) When("controller calls AddAdmin with a random address", func() { - It("should fail at the not owner requirenment", func() { + It("should fail at the not owner requirement", func() { tx, err := ControllerContract.AddAdmin(Controller.TransactOpts(ethertest.WithGasLimit(100000)), RandomAccount.Address()) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not an owner")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) }) }) diff --git a/test/controller/remove_admin_test.go b/test/controller/remove_admin_test.go index 74cb4eeb..b0647579 100644 --- a/test/controller/remove_admin_test.go +++ b/test/controller/remove_admin_test.go @@ -67,7 +67,7 @@ var _ = Describe("removeAdmin", func() { Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not an owner")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) }) It("should NOT decrease number of admins", func() { diff --git a/test/controller/remove_controller_test.go b/test/controller/remove_controller_test.go index c2a9a726..731bebf9 100644 --- a/test/controller/remove_controller_test.go +++ b/test/controller/remove_controller_test.go @@ -28,7 +28,7 @@ var _ = Describe("removeController", func() { Expect(count.String()).To(Equal("1")) }) - It("should NOT emit RemovdeController event", func() { + It("should NOT emit RemoveController event", func() { it, err := ControllerContract.FilterRemovedController(nil) Expect(err).ToNot(HaveOccurred()) Expect(it.Next()).To(BeFalse()) diff --git a/test/gas-proxy/execute_metaTransaction_test.go b/test/gas-proxy/execute_metaTransaction_test.go index a8599447..d9fe24f2 100644 --- a/test/gas-proxy/execute_metaTransaction_test.go +++ b/test/gas-proxy/execute_metaTransaction_test.go @@ -17,6 +17,7 @@ import ( "github.com/tokencard/contracts/v3/pkg/bindings" "github.com/tokencard/contracts/v3/pkg/bindings/externals/upgradeability" . "github.com/tokencard/contracts/v3/test/shared" + "github.com/tokencard/ethertest" ) var WalletImplementationAddress common.Address @@ -72,15 +73,18 @@ var _ = Describe("ExecuteMetaTransaction", func() { Expect(err).ToNot(HaveOccurred()) data, err := walletABI.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", Owner.Address(), abi.U256(EthToWei(1)), abi.U256(big.NewInt(int64(len(data)))), data)) + nonce := big.NewInt(0) chainId := big.NewInt(1337) - signature, err := SignData(chainId, ProxyAddress, nonce, data, Owner.PrivKey()) + signature, err := SignData(chainId, ProxyAddress, nonce, batch, Owner.PrivKey()) Expect(err).ToNot(HaveOccurred()) // create relayed transaction data - data, err = walletABI.Pack("executeRelayedTransaction", nonce, data, signature) + data, err = walletABI.Pack("executeRelayedTransaction", nonce, batch, signature) Expect(err).ToNot(HaveOccurred()) - tx, err := GasProxy.ExecuteTransaction(Controller.TransactOpts(), ProxyAddress, big.NewInt(0), data) + tx, err := GasProxy.ExecuteTransaction(Controller.TransactOpts(ethertest.WithGasLimit(6000000)), ProxyAddress, big.NewInt(0), data) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) diff --git a/test/gas-proxy/execute_transaction_test.go b/test/gas-proxy/execute_transaction_test.go index 88a298c5..a04c3e5e 100644 --- a/test/gas-proxy/execute_transaction_test.go +++ b/test/gas-proxy/execute_transaction_test.go @@ -29,7 +29,7 @@ var _ = Describe("ExecuteTransaction", func() { It("should be a successful transaction", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - It("should use the expected amout of gas", func() { + It("should use the expected amount of gas", func() { receipt, err := Backend.TransactionReceipt(context.Background(), tx.Hash()) Expect(err).ToNot(HaveOccurred()) fmt.Fprintf(GinkgoWriter, "Gas used by no-op execute transaction: %d/%d\n", receipt.GasUsed, tx.Gas()) @@ -50,7 +50,7 @@ var _ = Describe("ExecuteTransaction", func() { It("should be a successful transaction", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - It("should use the expected amout of gas", func() { + It("should use the expected amount of gas", func() { receipt, err := Backend.TransactionReceipt(context.Background(), tx.Hash()) Expect(err).ToNot(HaveOccurred()) fmt.Fprintf(GinkgoWriter, "Gas used by confirmOperation execute transaction: %d/%d\n", receipt.GasUsed, tx.Gas()) @@ -72,7 +72,7 @@ var _ = Describe("ExecuteTransaction", func() { It("should be a successful transaction", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - It("should use the expected amout of gas", func() { + It("should use the expected amount of gas", func() { receipt, err := Backend.TransactionReceipt(context.Background(), tx.Hash()) Expect(err).ToNot(HaveOccurred()) fmt.Fprintf(GinkgoWriter, "Gas used by burnGas execute transaction: %d/%d\n", receipt.GasUsed, tx.Gas()) diff --git a/test/holder/burn_decimal_test.go b/test/holder/burn_decimal_test.go index fc0b778f..3fc5f71f 100644 --- a/test/holder/burn_decimal_test.go +++ b/test/holder/burn_decimal_test.go @@ -54,7 +54,7 @@ var _ = Describe("TokenHolder", func() { Expect(evt.Value.String()).To(Equal("583")) }) - When("187 TKN are transfered to a random address", func() { + When("187 TKN are transferred to a random address", func() { BeforeEach(func() { tx, err := TKNBurner.Transfer(BankAccount.TransactOpts(), RandomAccount.Address(), big.NewInt(187)) @@ -212,13 +212,13 @@ var _ = Describe("TokenHolder", func() { Expect(b.String()).To(Equal("98")) }) - It("should decrease the ERC20 type-1 balance of the holder contract by 60", func() { //token1 sypply: 396 - 60 = 336 + It("should decrease the ERC20 type-1 balance of the holder contract by 60", func() { //token1 supply: 396 - 60 = 336 b, err := ERC20Contract1.BalanceOf(nil, TokenHolderAddress) Expect(err).ToNot(HaveOccurred()) Expect(b.String()).To(Equal("336")) }) - It("should decrease the ERC20 type-2 balance of the holder contract by 100", func() { //token2 sypply: 765 - 116 = 649 + It("should decrease the ERC20 type-2 balance of the holder contract by 100", func() { //token2 supply: 765 - 116 = 649 b, err := ERC20Contract2.BalanceOf(nil, TokenHolderAddress) Expect(err).ToNot(HaveOccurred()) Expect(b.String()).To(Equal("649")) @@ -262,7 +262,7 @@ var _ = Describe("TokenHolder", func() { }) }) //When("The holder contract has two types of ERC20 tokens" - }) //When TKN are transfered to a random address + }) //When TKN are transferred to a random address }) }) diff --git a/test/internals/parseIntScientific/parseIntScientific_test.go b/test/internals/parseIntScientific/parseIntScientific_test.go index 89af7251..df110fda 100644 --- a/test/internals/parseIntScientific/parseIntScientific_test.go +++ b/test/internals/parseIntScientific/parseIntScientific_test.go @@ -303,7 +303,7 @@ var _ = Describe("ParseIntScientific", func() { It("Should return 999999999999999900000", func() { res, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "999999999999999900000", big.NewInt(0)) Expect(err).ToNot(HaveOccurred()) - Expect(res.String()).To(Equal("999999999999999900000")) + Expect(res.String()).To(Equal("999999999999999900000")) }) }) @@ -323,7 +323,7 @@ var _ = Describe("ParseIntScientific", func() { }) }) - When("the integral part is 2^256-1 (max_uint256_value)", func() { + When("the integral part is 2^256-1 (max_uint256_value)", func() { It("Should succeed", func() { //input = 2^256, 0 <= uint <=2^256-1 res, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "115792089237316195423570985008687907853269984665640564039457584007913129639935", big.NewInt(0)) @@ -420,7 +420,7 @@ var _ = Describe("ParseIntScientific", func() { }) }) - When("there is a '.' a negatiive exponent", func() { + When("there is a '.' a negative exponent", func() { It("Should revert", func() { _, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "1e-3.", big.NewInt(0)) Expect(err).To(HaveOccurred()) @@ -594,7 +594,7 @@ var _ = Describe("ParseIntScientific", func() { }) }) - When("there is an '+' after a negatie exponent", func() { + When("there is an '+' after a negative exponent", func() { It("Should revert", func() { _, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "1.0123e-3+", big.NewInt(2)) Expect(err).To(HaveOccurred()) @@ -607,7 +607,7 @@ var _ = Describe("ParseIntScientific", func() { It("Should revert", func() { _, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "1.0123e", big.NewInt(2)) Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("abi: attempting to unmarshall")) + Expect(err.Error()).To(ContainSubstring("abi: attempting to unmarshall")) }) }) @@ -673,7 +673,7 @@ var _ = Describe("ParseIntScientific", func() { }) }) - When("there is no integral part before a positive eponent", func() { + When("there is no integral part before a positive exponent", func() { It("Should revert", func() { _, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "e+1", big.NewInt(0)) Expect(err).To(HaveOccurred()) @@ -681,7 +681,7 @@ var _ = Describe("ParseIntScientific", func() { }) }) - When("there is no integral part before a negative eponent", func() { + When("there is no integral part before a negative exponent", func() { It("Should revert", func() { _, err := ParseIntScientificExporter.ParseIntScientificDecimals(nil, "e-1", big.NewInt(0)) Expect(err).To(HaveOccurred()) @@ -713,7 +713,6 @@ var _ = Describe("ParseIntScientific", func() { }) }) - When("the integral part is 2^256 and an overflow occurs (max_uint256_value) = 2^256-1)", func() { It("Should revert", func() { //input 2^256, 0 <= uint <=2^256-1 diff --git a/test/licence/load_TKN_test.go b/test/licence/load_TKN_test.go index f86f758c..053dbaa8 100644 --- a/test/licence/load_TKN_test.go +++ b/test/licence/load_TKN_test.go @@ -81,7 +81,7 @@ var _ = Describe("load TKN", func() { Expect(evt.Value.String()).To(Equal("444")) }) - When("all the approved tokens are transfered ", func() { + When("all the approved tokens are transferred ", func() { BeforeEach(func() { tx, err := Licence.Load(RandomAccount.TransactOpts(), TKNBurnerAddress, big.NewInt(444)) @@ -141,7 +141,7 @@ var _ = Describe("load TKN", func() { }) //equal to approval - When("more tokens than approved are being transfered ", func() { + When("more tokens than approved are being transferred ", func() { It("Should revert", func() { tx, err := Licence.Load(RandomAccount.TransactOpts(ethertest.WithGasLimit(100000)), TKNBurnerAddress, big.NewInt(555)) diff --git a/test/licence/load_non-complaint_erc20_test.go b/test/licence/load_non-complaint_erc20_test.go index e273bd43..a13131b7 100644 --- a/test/licence/load_non-complaint_erc20_test.go +++ b/test/licence/load_non-complaint_erc20_test.go @@ -65,7 +65,7 @@ var _ = Describe("load ERC20", func() { Expect(evt.Value.String()).To(Equal("101")) }) - When("the exact approved amount is transfered ", func() { + When("the exact approved amount is transferred ", func() { BeforeEach(func() { tx, err := Licence.Load(RandomAccount.TransactOpts(), NonCompliantERC20Address, big.NewInt(101)) @@ -136,7 +136,7 @@ var _ = Describe("load ERC20", func() { }) //equal to approval - When("a bigger amount than the approved one is tried to be transfered ", func() { + When("a bigger amount than the approved one is tried to be transferred ", func() { It("Should revert", func() { tx, err := Licence.Load(RandomAccount.TransactOpts(ethertest.WithGasLimit(100000)), NonCompliantERC20Address, big.NewInt(102)) diff --git a/test/licence/update_TKN_test.go b/test/licence/update_TKN_test.go index f1edc356..ee5c2e69 100644 --- a/test/licence/update_TKN_test.go +++ b/test/licence/update_TKN_test.go @@ -115,7 +115,7 @@ var _ = Describe("updateTKN", func() { }) //called by the owner - Context("When not called by the Ower", func() { + Context("When not called by the Owner", func() { It("Should fail", func() { tx, err := Licence.UpdateTKNContractAddress(BankAccount.TransactOpts(ethertest.WithGasLimit(100000)), TKNBurnerAddress) Expect(err).ToNot(HaveOccurred()) diff --git a/test/licence/update_dao_test.go b/test/licence/update_dao_test.go index 4ee1100f..e2498867 100644 --- a/test/licence/update_dao_test.go +++ b/test/licence/update_dao_test.go @@ -111,7 +111,7 @@ var _ = Describe("updateDao", func() { }) //called by the owner - Context("When not called by the Ower", func() { + Context("When not called by the Owner", func() { It("Should fail", func() { tx, err := Licence.UpdateLicenceDAO(BankAccount.TransactOpts(ethertest.WithGasLimit(100000)), DAO.Address()) Expect(err).ToNot(HaveOccurred()) diff --git a/test/licence/update_float_test.go b/test/licence/update_float_test.go index aebfb72e..d755d7c5 100644 --- a/test/licence/update_float_test.go +++ b/test/licence/update_float_test.go @@ -110,7 +110,7 @@ var _ = Describe("updateFloat", func() { }) //called by the owner - Context("When not called by the Ower", func() { + Context("When not called by the Owner", func() { It("Should fail", func() { tx, err := Licence.UpdateHolder(BankAccount.TransactOpts(ethertest.WithGasLimit(100000)), CryptoFloatAddress) Expect(err).ToNot(HaveOccurred()) diff --git a/test/licence/update_holder_test.go b/test/licence/update_holder_test.go index 1f015507..881d59a5 100644 --- a/test/licence/update_holder_test.go +++ b/test/licence/update_holder_test.go @@ -111,7 +111,7 @@ var _ = Describe("updateHolder", func() { }) //called by the owner - Context("When not called by the Ower", func() { + Context("When not called by the Owner", func() { It("Should fail", func() { tx, err := Licence.UpdateHolder(BankAccount.TransactOpts(ethertest.WithGasLimit(100000)), CryptoFloatAddress) Expect(err).ToNot(HaveOccurred()) diff --git a/test/oracle/update_token_rate_test.go b/test/oracle/update_token_rate_test.go index 1a2d4f6b..c23e0cd7 100644 --- a/test/oracle/update_token_rate_test.go +++ b/test/oracle/update_token_rate_test.go @@ -124,10 +124,10 @@ var _ = Describe("UpdateTokenRate", func() { }) }) - Context("When the result is is misformated", func() { + Context("When the result is is misformatted", func() { BeforeEach(func() { - //update the public key, needed because we sign our own (misformated) results for the proof in the rate update + //update the public key, needed because we sign our own (misformatted) results for the proof in the rate update tx, err := Oracle.UpdateCryptoCompareAPIPublicKey(ControllerAdmin.TransactOpts(), common.Hex2Bytes("717580b4c7577ebe0a7c3c21213ffbfa1221d2c1fe455d4897800d86eb65d91f8fb6c2304a54d89ab5c13a690f03dce25f7d46af90f79908d6be8bcdcdf74c22")) Expect(err).ToNot(HaveOccurred()) Backend.Commit() @@ -175,10 +175,10 @@ var _ = Describe("UpdateTokenRate", func() { }) }) - Context("When the date is is misformated", func() { + Context("When the date is is misformatted", func() { BeforeEach(func() { - //update the public key, needed because we sign our own (misformated) results for the proof + //update the public key, needed because we sign our own (misformatted) results for the proof tx, err := Oracle.UpdateCryptoCompareAPIPublicKey(ControllerAdmin.TransactOpts(), common.Hex2Bytes("717580b4c7577ebe0a7c3c21213ffbfa1221d2c1fe455d4897800d86eb65d91f8fb6c2304a54d89ab5c13a690f03dce25f7d46af90f79908d6be8bcdcdf74c22")) Expect(err).ToNot(HaveOccurred()) Backend.Commit() @@ -256,7 +256,7 @@ var _ = Describe("UpdateTokenRate", func() { }) It("It should Fail", func() { - //wrong delimiters, - instead of ' ', interpretes the whole string as the day + //wrong delimiters, - instead of ' ', interprets the whole string as the day proof := common.Hex2Bytes("0041f1bcafadb5a8cb52218f0dade45bade9024a2cef4d5aae363e57e41ef765c5b86980d0fb5ff62fec6b529352b92025fbb595f29b9441759b8932483d9f7b40061c0060646174653a204672692c2031362d4e6f762d323031382d31363a32323a363020474d540a6469676573743a205348412d3235363d4459452b675a6c4147756c5630562f67774a4347452f78423171484b66516c42476a37586c3441496649383d") tx, err := Oracle.UpdateTokenRate(RandomAccount.TransactOpts(ethertest.WithGasLimit(300000)), common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), "{\"ETH\":0.003637}", proof) Expect(err).ToNot(HaveOccurred()) @@ -350,7 +350,7 @@ var _ = Describe("UpdateTokenRate", func() { It("Should fail", func() { //date has been tampered with (year 2019 instead of 2018) //result has changed (bytes[-3]-bytes[-2]) - //the signature verfication should fail, code does not reach the hash verification + //the signature verification should fail, code does not reach the hash verification proof := common.Hex2Bytes("0041ed930d0cf64c73b82c3a04b958f2d27572c09ef7faacb14f062b2ce63eb78331a885fda74e113383ead579337b7e02cc414a214c3bd210142628087dcf5ded781c0060646174653a205765642c203033204f637420323031392031373a30303a323220474d540a6469676573743a205348412d3235363d36514d48744c664e677576362b63795a6133376d68513962776f394449482f6451672f54715a34467454393d") tx, err := Oracle.UpdateTokenRate(RandomAccount.TransactOpts(ethertest.WithGasLimit(200000)), common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), "{\"ETH\":0.001702}", proof) Expect(err).ToNot(HaveOccurred()) diff --git a/test/shared/backend_setup.go b/test/shared/backend_setup.go index b0d772db..490747ea 100644 --- a/test/shared/backend_setup.go +++ b/test/shared/backend_setup.go @@ -550,7 +550,7 @@ func InitializeBackend() error { } // Add the Stablecoin token to the oracle list. - tx, err = TokenWhitelist.AddTokens(ControllerAdmin.TransactOpts(), []common.Address{StablecoinAddress}, StringsToByte32("USDC"), []*big.Int{ExponentiateDecimals(6)}, []bool{true}, []bool{true}, big.NewInt(20180913153211)) + tx, err = TokenWhitelist.AddTokens(ControllerAdmin.TransactOpts(), []common.Address{StablecoinAddress}, StringsToByte32("DAI"), []*big.Int{ExponentiateDecimals(18)}, []bool{true}, []bool{true}, big.NewInt(20180913153211)) if err != nil { return err } diff --git a/test/token-whitelist/set_token_flags_test.go b/test/token-whitelist/set_token_flags_test.go index cf53b373..d5b99219 100644 --- a/test/token-whitelist/set_token_flags_test.go +++ b/test/token-whitelist/set_token_flags_test.go @@ -208,7 +208,7 @@ var _ = Describe("setTokenRedeemable", func() { Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not an admin")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not admin")) }) }) }) diff --git a/test/upgradeable/fallback_test.go b/test/upgradeable/fallback_test.go index 279be464..687d9965 100644 --- a/test/upgradeable/fallback_test.go +++ b/test/upgradeable/fallback_test.go @@ -46,7 +46,7 @@ var _ = Describe("fallback", func() { }) }) - When("using tranfser()", func() { + When("using transfer()", func() { BeforeEach(func() { // transfer 1 wei to proxy tx, err = Wallet.Transfer(Owner.TransactOpts(), ProxyAddress, big.NewInt(1)) diff --git a/test/upgradeable/uninitialized_test.go b/test/upgradeable/uninitialized_test.go index 919830fa..5e0cbffb 100644 --- a/test/upgradeable/uninitialized_test.go +++ b/test/upgradeable/uninitialized_test.go @@ -25,31 +25,31 @@ var _ = Describe("uninitialized", func() { ProxyWallet, err = bindings.NewWallet(ProxyAddress, Backend) }) - It("Should fail when there's onlyOwnerOrController()", func() { - tx, err = ProxyWallet.TopUpGas(Owner.TransactOpts(ethertest.WithGasLimit(100000)), big.NewInt(1000)) + It("Should fail when there's onlyOwnerOr2FA()", func() { + tx, err = ProxyWallet.TopUpGas(Owner.TransactOpts(ethertest.WithGasLimit(100000)), EthToWei(100)) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("ENSResolvable not initialized")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("only owner or 2FA")) }) It("Should fail it when there's onlyOwnerOrSelf()", func() { - tx, err = ProxyWallet.SetSpendLimit(Owner.TransactOpts(ethertest.WithGasLimit(100000)), big.NewInt(1000)) + tx, err = ProxyWallet.SubmitDailyLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(100000)), EthToWei(1000)) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("only owner||self")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("Not owner or self")) }) - It("Should fail it when there's onlyController()", func() { - tx, err = ProxyWallet.ConfirmSpendLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(100000)), big.NewInt(1000)) + It("Should fail it when there's only2FA()", func() { + tx, err = ProxyWallet.ConfirmDailyLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(100000)), big.NewInt(1000)) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("ENSResolvable not initialized")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not personal 2FA account")) }) It("Should fail it when there's onlyOwner()", func() { @@ -58,7 +58,7 @@ var _ = Describe("uninitialized", func() { Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not an owner")) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) }) }) diff --git a/test/wallet-deployer/cache_wallet_test.go b/test/wallet-deployer/cache_wallet_test.go index 15a22dad..e830c964 100644 --- a/test/wallet-deployer/cache_wallet_test.go +++ b/test/wallet-deployer/cache_wallet_test.go @@ -14,10 +14,10 @@ var _ = Describe("Cache Wallet", func() { When("no Wallets are cached", func() { - It("should have a default spend limit of 1 ETH", func() { - sl, err := WalletCache.DefaultSpendLimit(nil) + It("should have a default daily limit of 10000 USD", func() { + sl, err := WalletCache.DefaultDailyLimit(nil) Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(EthToWei(1).String())) + Expect(sl.String()).To(Equal(big.NewInt(10000).String())) }) It("should point to the right tokenwhitelist node name", func() { diff --git a/test/wallet-deployer/migrate_wallet_test.go b/test/wallet-deployer/migrate_wallet_test.go index b75eaaaf..4e7d29cb 100644 --- a/test/wallet-deployer/migrate_wallet_test.go +++ b/test/wallet-deployer/migrate_wallet_test.go @@ -24,7 +24,7 @@ var _ = Describe("Migrate Wallet", func() { RandomProxyAddress := deployInitProxy(Owner.Address(), EthToWei(2)) - tx, err := WalletDeployer.MigrateWallet(Controller.TransactOpts(), Owner.Address(), RandomProxyAddress, false, false, false, false, EthToWei(2), FinneyToWei(1), EthToWei(1), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) + tx, err := WalletDeployer.MigrateWallet(Controller.TransactOpts(), Owner.Address(), RandomProxyAddress, false, false, EthToWei(2), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) @@ -40,24 +40,6 @@ var _ = Describe("Migrate Wallet", func() { Expect(initialized).To(BeFalse()) }) - It("should NOT make the GasTopUpLimit updateable", func() { - initialized, err := MigratedWallet.GasTopUpLimitControllerConfirmationRequired(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeFalse()) - }) - - It("should NOT make SpendLimit updateable", func() { - initialized, err := MigratedWallet.SpendLimitControllerConfirmationRequired(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeFalse()) - }) - - It("should NOT make LoadLimit updateable", func() { - initialized, err := MigratedWallet.LoadLimitControllerConfirmationRequired(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeFalse()) - }) - It("should NOT add the whitelisted addresses to the whitelist", func() { isWhitelisted, err := MigratedWallet.WhitelistMap(nil, common.HexToAddress("0x1")) Expect(err).ToNot(HaveOccurred()) @@ -68,27 +50,14 @@ var _ = Describe("Migrate Wallet", func() { Expect(isWhitelisted).To(BeFalse()) }) - It("should NOT update the spend limit to 2 ETH", func() { - sl, err := MigratedWallet.SpendLimitValue(nil) + It("should NOT update the daily limit", func() { + sl, err := MigratedWallet.DailyLimitValue(nil) Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(EthToWei(1).String())) + Expect(sl.String()).To(Equal(EthToWei(10000).String())) }) - - It("should NOT update the gasTopUp limit to 1 finney", func() { - sl, err := MigratedWallet.GasTopUpLimitValue(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(FinneyToWei(500).String())) - }) - - It("should NOT increase the loadLimit", func() { - sl, err := MigratedWallet.LoadLimitValue(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(GweiToWei(10).String())) - }) - }) - When("no wallets are cached and a controller migrates a Wallet and send 1000 wei", func() { + When("no wallets are cached and a controller migrates a Wallet and sends 1000 wei", func() { var RandomProxyAddress common.Address var RandomOwner common.Address @@ -101,7 +70,16 @@ var _ = Describe("Migrate Wallet", func() { RandomProxyAddress = deployInitProxy(RandomOwner, EthToWei(2)) - tx, err = WalletDeployer.MigrateWallet(Controller.TransactOpts(ethertest.WithValue(big.NewInt(1000))), RandomOwner, RandomProxyAddress, true, true, true, true, EthToWei(2), FinneyToWei(1), GweiToWei(1), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) + tx, err = WalletDeployer.MigrateWallet( + Controller.TransactOpts(ethertest.WithValue(big.NewInt(1000))), + RandomOwner, + RandomProxyAddress, + true, + true, + MweiToWei(5000), + []common.Address{common.HexToAddress("0x1"), + common.HexToAddress("0x2")}, + ) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) @@ -140,7 +118,7 @@ var _ = Describe("Migrate Wallet", func() { }) It("should fail if a wallet is already deployed/migrated for this owner", func() { - tx, err = WalletDeployer.MigrateWallet(Controller.TransactOpts(ethertest.WithGasLimit(5000000)), RandomOwner, RandomProxyAddress, true, true, true, true, EthToWei(2), FinneyToWei(1), EthToWei(1000), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) + tx, err = WalletDeployer.MigrateWallet(Controller.TransactOpts(ethertest.WithGasLimit(5000000)), RandomOwner, RandomProxyAddress, true, true, EthToWei(2), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) @@ -167,88 +145,26 @@ var _ = Describe("Migrate Wallet", func() { Expect(err).ToNot(HaveOccurred()) }) - It("should emit a setSpendLimit set event", func() { - it, err := MigratedWallet.FilterSetSpendLimit(nil) + It("should emit a daily limit set event", func() { + it, err := MigratedWallet.FilterSetDailyLimit(nil) Expect(err).ToNot(HaveOccurred()) Expect(it.Next()).To(BeTrue()) evt := it.Event Expect(it.Next()).To(BeFalse()) Expect(evt.Sender).To(Equal(WalletDeployerAddress)) - Expect(evt.Amount).To(Equal(EthToWei(2))) - }) - - It("should keep the available spend Limit to 1 ETH", func() { - av, err := MigratedWallet.SpendLimitAvailable(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(av.String()).To(Equal(EthToWei(1).String())) + Expect(evt.Amount).To(Equal(MweiToWei(5000))) }) - It("should update the spend limit to 2 ETH", func() { - sl, err := MigratedWallet.SpendLimitValue(nil) + It("should decrease the available amount to 5k USD", func() { + av, err := MigratedWallet.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(EthToWei(2).String())) + Expect(av.String()).To(Equal(MweiToWei(5000).String())) }) - It("should make SpendLimit updateable", func() { - initialized, err := MigratedWallet.SpendLimitControllerConfirmationRequired(nil) + It("should decrement the daily limit to 5k USD", func() { + sl, err := MigratedWallet.DailyLimitValue(nil) Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeTrue()) - }) - - It("should update the gasTopUp limit to 1 finney", func() { - sl, err := MigratedWallet.GasTopUpLimitValue(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(FinneyToWei(1).String())) - }) - - It("should decrease the available gasTopUpLimit to 1 Finney", func() { - av, err := MigratedWallet.GasTopUpLimitAvailable(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(av.String()).To(Equal(FinneyToWei(1).String())) - }) - - It("should make GasToUpLimit updateable", func() { - initialized, err := MigratedWallet.GasTopUpLimitControllerConfirmationRequired(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeTrue()) - }) - - It("should emit a setGasTopUpLimit event", func() { - it, err := MigratedWallet.FilterSetGasTopUpLimit(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(it.Next()).To(BeTrue()) - evt := it.Event - Expect(it.Next()).To(BeFalse()) - Expect(evt.Sender).To(Equal(WalletDeployerAddress)) - Expect(evt.Amount).To(Equal(FinneyToWei(1))) - }) - - It("should make LoadLimit updateable", func() { - initialized, err := MigratedWallet.LoadLimitControllerConfirmationRequired(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeTrue()) - }) - - It("should emit a setLoadLimit set event", func() { - it, err := MigratedWallet.FilterSetLoadLimit(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(it.Next()).To(BeTrue()) - evt := it.Event - Expect(it.Next()).To(BeFalse()) - Expect(evt.Sender).To(Equal(WalletDeployerAddress)) - Expect(evt.Amount).To(Equal(GweiToWei(1))) - }) - - It("should decrease the available loadLimit to 1000 USD", func() { - av, err := MigratedWallet.LoadLimitAvailable(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(av.String()).To(Equal(GweiToWei(1).String())) - }) - - It("should decrease the loadLimit to 1000 USD", func() { - sl, err := MigratedWallet.LoadLimitValue(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(GweiToWei(1).String())) + Expect(sl.String()).To(Equal(MweiToWei(5000).String())) }) It("should update the Whitelist initializedWhitelist flag", func() { @@ -257,12 +173,6 @@ var _ = Describe("Migrate Wallet", func() { Expect(initialized).To(BeTrue()) }) - It("should update the TopUpLimit initializedTopup flag", func() { - initialized, err := MigratedWallet.GasTopUpLimitControllerConfirmationRequired(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(initialized).To(BeTrue()) - }) - It("should add the whitelisted addresses to the whitelist", func() { isWhitelisted, err := MigratedWallet.WhitelistMap(nil, common.HexToAddress("0x1")) Expect(err).ToNot(HaveOccurred()) @@ -284,13 +194,13 @@ var _ = Describe("Migrate Wallet", func() { }) }) - }) //no wallets chached + }) //no wallets cached - When("the worng owner is passed in", func() { + When("the wrong owner is passed in", func() { It("should fail", func() { RandomProxyAddress := deployInitProxy(Owner.Address(), EthToWei(2)) - tx, err := WalletDeployer.MigrateWallet(Controller.TransactOpts(ethertest.WithGasLimit(5000000)), Controller.Address(), RandomProxyAddress, false, false, false, false, EthToWei(2), FinneyToWei(1), EthToWei(1000), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) + tx, err := WalletDeployer.MigrateWallet(Controller.TransactOpts(ethertest.WithGasLimit(5000000)), Controller.Address(), RandomProxyAddress, false, false, EthToWei(2), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) @@ -301,7 +211,7 @@ var _ = Describe("Migrate Wallet", func() { When("a random account tries to migrate a Wallet", func() { It("should fail", func() { - tx, err := WalletDeployer.MigrateWallet(RandomAccount.TransactOpts(ethertest.WithGasLimit(5000000)), Owner.Address(), RandomAccount.Address(), false, false, false, false, EthToWei(1), FinneyToWei(2), EthToWei(1000), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) + tx, err := WalletDeployer.MigrateWallet(RandomAccount.TransactOpts(ethertest.WithGasLimit(5000000)), Owner.Address(), RandomAccount.Address(), false, false, EthToWei(1), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) @@ -326,7 +236,7 @@ var _ = Describe("Migrate Wallet", func() { RandomProxyAddress = deployInitProxy(Owner.Address(), EthToWei(2)) - tx, err = WalletDeployer.MigrateWallet(Controller.TransactOpts(), Owner.Address(), RandomProxyAddress, false, false, false, false, EthToWei(1), FinneyToWei(2), EthToWei(1000), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) + tx, err = WalletDeployer.MigrateWallet(Controller.TransactOpts(), Owner.Address(), RandomProxyAddress, false, false, EthToWei(1), []common.Address{common.HexToAddress("0x1"), common.HexToAddress("0x2")}) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) diff --git a/test/wallet-deployer/wallet_deployer_suite_test.go b/test/wallet-deployer/wallet_deployer_suite_test.go index 80bd1322..2736e606 100644 --- a/test/wallet-deployer/wallet_deployer_suite_test.go +++ b/test/wallet-deployer/wallet_deployer_suite_test.go @@ -123,7 +123,7 @@ var _ = BeforeEach(func() { Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) - WalletCacheAddress, tx, WalletCache, err = bindings.DeployWalletCache(BankAccount.TransactOpts(), Backend, WalletImplementationAddress, ENSRegistryAddress, EthToWei(1), [32]byte{}, [32]byte{}, [32]byte{}, [32]byte{}) + WalletCacheAddress, tx, WalletCache, err = bindings.DeployWalletCache(BankAccount.TransactOpts(), Backend, WalletImplementationAddress, ENSRegistryAddress, big.NewInt(10000), [32]byte{}, [32]byte{}, [32]byte{}, [32]byte{}) Expect(err).ToNot(HaveOccurred()) WalletDeployerAddress, tx, WalletDeployer, err = bindings.DeployWalletDeployer(BankAccount.TransactOpts(), Backend, ENSRegistryAddress, [32]byte{}, [32]byte{}) Expect(err).ToNot(HaveOccurred()) diff --git a/test/wallet-deployer/wallet_deployer_test.go b/test/wallet-deployer/wallet_deployer_test.go index 14a46b7c..cd9cf808 100644 --- a/test/wallet-deployer/wallet_deployer_test.go +++ b/test/wallet-deployer/wallet_deployer_test.go @@ -68,7 +68,7 @@ var _ = Describe("Wallet Deployer", func() { Expect(it.Event.Wallet).To(Equal(addr)) }) - When("new Wallet owner sets the spend limit", func() { + When("new Wallet owner sets the daily limit", func() { var NewWallet *bindings.Wallet BeforeEach(func() { @@ -81,7 +81,7 @@ var _ = Describe("Wallet Deployer", func() { }) It("should succeed", func() { - tx, err := NewWallet.SetSpendLimit(Owner.TransactOpts(), EthToWei(1)) + tx, err := NewWallet.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(1)) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) @@ -122,7 +122,7 @@ var _ = Describe("Wallet Deployer", func() { Expect(addr).ToNot(Equal(common.HexToAddress("0x0"))) }) - When("New Wallet owner sets the spend limit", func() { + When("New Wallet owner sets the daily limit", func() { var NewWallet *bindings.Wallet BeforeEach(func() { @@ -131,22 +131,22 @@ var _ = Describe("Wallet Deployer", func() { NewWallet, err = bindings.NewWallet(NewWalletAddress, Backend) Expect(err).ToNot(HaveOccurred()) - tx, err := NewWallet.SetSpendLimit(Owner.TransactOpts(), FinneyToWei(500)) + tx, err := NewWallet.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(5000)) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) }) - It("should lower the spend available to 500 Finney", func() { - av, err := NewWallet.SpendLimitAvailable(nil) + It("should lower the daily available to 5000 USD", func() { + av, err := NewWallet.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - Expect(av.String()).To(Equal(FinneyToWei(500).String())) + Expect(av.String()).To(Equal(EthToWei(5000).String())) }) - It("should have a spend limit of 500 Finney", func() { - sl, err := NewWallet.SpendLimitValue(nil) + It("should have a daily limit of 5000 USD", func() { + sl, err := NewWallet.DailyLimitValue(nil) Expect(err).ToNot(HaveOccurred()) - Expect(sl.String()).To(Equal(FinneyToWei(500).String())) + Expect(sl.String()).To(Equal(EthToWei(5000).String())) }) }) diff --git a/test/wallet/2fa_test.go b/test/wallet/2fa_test.go new file mode 100644 index 00000000..f663f913 --- /dev/null +++ b/test/wallet/2fa_test.go @@ -0,0 +1,305 @@ +package wallet_test + +import ( + "github.com/ethereum/go-ethereum/common" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/tokencard/contracts/v3/test/shared" + + "github.com/tokencard/ethertest" +) + +var _ = Describe("2FA", func() { + + It("should be true when checking monolith 2FA variable value", func() { + oo, err := WalletProxy.Monolith2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(oo).To(BeTrue()) + }) + + It("should NOT allow a non-owner to set Monolith 2FA", func() { + tx, err := WalletProxy.SetMonolith2FA(Controller.TransactOpts(ethertest.WithGasLimit(60000))) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) + }) + + It("should fail to set Monolith 2FA if Monolith 2FA is already enabled", func() { + tx, err := WalletProxy.SetMonolith2FA(Owner.TransactOpts(ethertest.WithGasLimit(60000))) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("monolith2FA already enabled")) + }) + + It("should NOT allow a non-owner to set personal 2FA", func() { + tx, err := WalletProxy.SetPersonal2FA(Controller.TransactOpts(ethertest.WithGasLimit(60000)), common.HexToAddress(("0x1"))) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) + }) + + It("should NOT allow a non-owner to set Monolith 2FA", func() { + tx, err := WalletProxy.SetMonolith2FA(Controller.TransactOpts(ethertest.WithGasLimit(60000))) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) + }) + + It("should NOT allow an owner to set the personal 2FA to address 0x0", func() { + tx, err := WalletProxy.SetPersonal2FA(Owner.TransactOpts(ethertest.WithGasLimit(60000)), common.HexToAddress(("0x0"))) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("2FA cannot be set to zero")) + }) + + It("should NOT allow an owner to set the personal 2FA to the same address", func() { + tx, err := WalletProxy.SetPersonal2FA(Owner.TransactOpts(ethertest.WithGasLimit(60000)), Owner.Address()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + returnData, _ := ethCall(tx) + tx, err = WalletProxy.SetPersonal2FA(Owner.TransactOpts(ethertest.WithGasLimit(60000)), Owner.Address()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ = ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("address already set")) + }) + + //TODO add privileged test + + When("the owner submits an account whitelist addition", func() { + BeforeEach(func() { + tx, err := WalletProxy.SetWhitelist(Owner.TransactOpts(), []common.Address{common.HexToAddress("0x1")}) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.SubmitWhitelistAddition(Owner.TransactOpts(), []common.Address{RandomAccount.Address()}) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + When("a random account tries to confirm the account addition to the whitelist", func() { + It("should fail", func() { + pwl, err := WalletProxy.PendingWhitelistAddition(nil) + Expect(err).ToNot(HaveOccurred()) + hash, err := WalletProxy.CalculateHash(nil, pwl) + Expect(err).ToNot(HaveOccurred()) + tx, err := WalletProxy.CancelWhitelistAddition(RandomAccount.TransactOpts(ethertest.WithGasLimit(500000)), hash) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("only owner or 2FA")) + }) + }) + + When("the controller (Monolith 2FA) tries to confirm the account addition to the whitelist", func() { + It("should succeed", func() { + pwl, err := WalletProxy.PendingWhitelistAddition(nil) + Expect(err).ToNot(HaveOccurred()) + hash, err := WalletProxy.CalculateHash(nil, pwl) + Expect(err).ToNot(HaveOccurred()) + tx, err := WalletProxy.CancelWhitelistAddition(Controller.TransactOpts(), hash) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + }) + }) + + When("the owner submits a daily limit of 12k USD", func() { + BeforeEach(func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + When("Monolith opt-out is NOT enabled and controller confirms", func() { + It("should succeed", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should fail when a random account tries to confirm", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(RandomAccount.TransactOpts(ethertest.WithGasLimit(80000)), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not a Monolith 2FA")) + }) + }) + + When("Monolith opt-out is enabled and 2FA is a random account", func() { + BeforeEach(func() { + tx, err := WalletProxy.SetPersonal2FA(Owner.TransactOpts(), RandomAccount.Address()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should return false when checking monolith2FA variable value", func() { + m2fa, err := WalletProxy.Monolith2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(m2fa).To(BeFalse()) + }) + + It("should set the random account address as personal 2FA", func() { + p2fa, err := WalletProxy.Personal2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(p2fa).To(Equal(RandomAccount.Address())) + }) + + It("should emit a SetPersonal2Fa event", func() { + it, err := WalletProxy.FilterSetPersonal2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.P2FA).To(Equal(RandomAccount.Address())) + }) + + It("should fail when controller (ex Monolith 2FA) tries to confirm the limit update", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(80000)), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not personal 2FA")) + }) + + When("the owner set Monlith 2FA again", func() { + BeforeEach(func() { + tx, err := WalletProxy.SetMonolith2FA(Owner.TransactOpts()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should be true when checking monolith 2FA variable value", func() { + m2fa, err := WalletProxy.Monolith2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(m2fa).To(BeTrue()) + }) + + It("should set the 2FA address to 0x0 (setting to 0x0 can be done only when calling SetMonolith2FA)", func() { + p2fa, err := WalletProxy.Personal2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(p2fa).To(Equal(common.HexToAddress("0x0"))) + }) + + It("Should emit a SetMonolith2FA event", func() { + it, err := WalletProxy.FilterSetMonolith2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Owner.Address())) + }) + + It("should succeed when the controller (Monolith 2FA) confirms the limit update", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should fail when a random account tries to confirm the daily limit update", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(RandomAccount.TransactOpts(ethertest.WithGasLimit(80000)), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not a Monolith 2FA")) + }) + }) + + When("the random account confirms the new limit update", func() { + BeforeEach(func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(RandomAccount.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should have 12k USD available for spending", func() { + tl, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(tl.String()).To(Equal(EthToWei(12000).String())) + }) + + It("should emit a SetPersonal2FA event", func() { + it, err := WalletProxy.FilterSetPersonal2FA(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.P2FA).To(Equal(RandomAccount.Address())) + }) + + When("the owner submits a whitelist addition", func() { + BeforeEach(func() { + tx, err := WalletProxy.SetWhitelist(Owner.TransactOpts(ethertest.WithGasLimit(500000)), []common.Address{common.HexToAddress("0x1")}) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.SubmitWhitelistAddition(Owner.TransactOpts(ethertest.WithGasLimit(500000)), []common.Address{RandomAccount.Address()}) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + When("the controller tries to cancel the account addition to the whitelist", func() { + It("should fail", func() { + pwl, err := WalletProxy.PendingWhitelistAddition(nil) + Expect(err).ToNot(HaveOccurred()) + hash, err := WalletProxy.CalculateHash(nil, pwl) + Expect(err).ToNot(HaveOccurred()) + tx, err := WalletProxy.CancelWhitelistAddition(Controller.TransactOpts(ethertest.WithGasLimit(500000)), hash) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("only owner or 2FA")) + }) + }) + + When("the random account (set now as 2FA) tries to cancel the account addition to the whitelist", func() { + It("should succeed", func() { + pwl, err := WalletProxy.PendingWhitelistAddition(nil) + Expect(err).ToNot(HaveOccurred()) + hash, err := WalletProxy.CalculateHash(nil, pwl) + Expect(err).ToNot(HaveOccurred()) + tx, err := WalletProxy.CancelWhitelistAddition(RandomAccount.TransactOpts(), hash) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + }) + + }) + + }) + + }) + }) +}) diff --git a/test/wallet/batch_execute_transaction_test.go b/test/wallet/batch_execute_transaction_test.go index 5b892667..8d064da2 100644 --- a/test/wallet/batch_execute_transaction_test.go +++ b/test/wallet/batch_execute_transaction_test.go @@ -160,7 +160,7 @@ var _ = Describe("batchExecuteTransaction", func() { a, err := abi.JSON(strings.NewReader(WALLET_ABI)) Expect(err).ToNot(HaveOccurred()) - data, err := a.Pack("setSpendLimit", EthToWei(1)) + data, err := a.Pack("submitDailyLimitUpdate", EthToWei(1)) Expect(err).ToNot(HaveOccurred()) batch := fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(big.NewInt(0)), abi.U256(big.NewInt(int64(len(data)))), data) @@ -196,8 +196,8 @@ var _ = Describe("batchExecuteTransaction", func() { Expect(evt.Addresses).To(Equal([]common.Address{RandomAccount.Address()})) }) - It("should emit a spend limit set event", func() { - it, err := WalletProxy.FilterSetSpendLimit(nil) + It("should emit a limit set event", func() { + it, err := WalletProxy.FilterSetDailyLimit(nil) Expect(err).ToNot(HaveOccurred()) Expect(it.Next()).To(BeTrue()) evt := it.Event @@ -206,14 +206,14 @@ var _ = Describe("batchExecuteTransaction", func() { Expect(evt.Amount).To(Equal(EthToWei(1))) }) - It("should lower the spend available to 1 ETH", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should lower the available amount to 1 USD", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(av.String()).To(Equal(EthToWei(1).String())) }) - It("should have spend limit of 1 ETH", func() { - sl, err := WalletProxy.SpendLimitValue(nil) + It("should have a limit of 1 USD", func() { + sl, err := WalletProxy.DailyLimitValue(nil) Expect(err).ToNot(HaveOccurred()) Expect(sl.String()).To(Equal(EthToWei(1).String())) }) @@ -339,7 +339,7 @@ const WALLET_ABI = `[ "type": "uint256" } ], - "name": "setSpendLimit", + "name": "submitDailyLimitUpdate", "outputs": [], "payable": false, "stateMutability": "nonpayable", diff --git a/test/wallet/constructor_test.go b/test/wallet/constructor_test.go index 6d53f668..1bb7a4e2 100644 --- a/test/wallet/constructor_test.go +++ b/test/wallet/constructor_test.go @@ -1,7 +1,6 @@ package wallet_test import ( - "github.com/ethereum/go-ethereum/common" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/tokencard/contracts/v3/pkg/bindings" @@ -12,40 +11,24 @@ import ( var _ = Describe("wallet initialization", func() { - Context("the stablecoin should be in the whitelist", func() { - It("Should update the tokens map", func() { - symbol, _, _, available, loadable, _, _, err := TokenWhitelist.GetTokenInfo(nil, StablecoinAddress) - Expect(err).ToNot(HaveOccurred()) - Expect(symbol).To(Equal("USDC")) - Expect(available).To(BeTrue()) - Expect(loadable).To(BeTrue()) - }) - }) - - When("the stablecoing is removed from the list", func() { - - BeforeEach(func() { - tx, err := TokenWhitelist.RemoveTokens(ControllerAdmin.TransactOpts(), []common.Address{StablecoinAddress}) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - It("Should NOT initialize a new wallet porxy", func() { - RandomProxyAddress, tx, _, err := upgradeability.DeployUpgradeabilityProxy(BankAccount.TransactOpts(), Backend, WalletImplementationAddress, nil) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - - RandomProxy, err := bindings.NewWallet(RandomProxyAddress, Backend) - tx, err = RandomProxy.InitializeWallet(BankAccount.TransactOpts(ethertest.WithGasLimit(7000000)), Owner.Address(), false, ENSRegistryAddress, TokenWhitelistNode, ControllerNode, LicenceNode, EthToWei(100)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeFalse()) - returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("no stablecoin")) - }) - + It("Should deploy a new wallet", func() { + RandomProxyAddress, tx, _, err := upgradeability.DeployUpgradeabilityProxy( + BankAccount.TransactOpts(), + Backend, + WalletImplementationAddress, + nil, + ) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + RandomProxy, err := bindings.NewWallet(RandomProxyAddress, Backend) + tx, err = RandomProxy.InitializeWallet(BankAccount.TransactOpts(ethertest.WithGasLimit(7000000)), Owner.Address(), false, ENSRegistryAddress, TokenWhitelistNode, ControllerNode, LicenceNode, EthToWei(100)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + //returnData, _ := ethCall(tx) + //Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("no stablecoin")) }) }) diff --git a/test/wallet/convert_to_ether_test.go b/test/wallet/convert_to_ether_test.go deleted file mode 100644 index a125e3b3..00000000 --- a/test/wallet/convert_to_ether_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package wallet_test - -import ( - "math" - "math/big" - - "github.com/ethereum/go-ethereum/common" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/tokencard/contracts/v3/test/shared" -) - -var _ = Describe("convertToEther", func() { - Context("When the token is already supported", func() { - BeforeEach(func() { - tx, err := TokenWhitelist.AddTokens( - ControllerAdmin.TransactOpts(), - []common.Address{common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982")}, - StringsToByte32("TKN"), - []*big.Int{DecimalsToMagnitude(big.NewInt(8))}, - []bool{true}, - []bool{true}, - big.NewInt(20180913153211), - ) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - Context("When exchange rate is 0", func() { - It("Should fail", func() { - _, err := WalletProxy.ConvertToEther(nil, common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), big.NewInt(100)) - Expect(err).To(HaveOccurred()) - }) - }) - Context("When exchange rate is NOT 0", func() { - BeforeEach(func() { - tx, err := TokenWhitelist.UpdateTokenRate( - ControllerAdmin.TransactOpts(), - common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), - big.NewInt(int64(0.001633*math.Pow10(18))), - big.NewInt(20180913153211), - ) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - Context("When overflow occurs", func() { - It("Should trigger assert() (empty output)", func() { - _, err := WalletProxy.ConvertToEther(nil, common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), big.NewInt(-1)) - Expect(err.Error()).To(ContainSubstring("SafeMath: multiplication overflow")) - }) - }) - Context("When overflow does not occur", func() { - It("Should return 0.01(amount)*0.001633(rate)*10^18(in wei)", func() { - value, err := WalletProxy.ConvertToEther(nil, common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), big.NewInt(int64(0.01*math.Pow10(8)))) - Expect(err).ToNot(HaveOccurred()) - Expect(value.String()).To(Equal("16330000000000")) - }) - }) - }) - }) - - Context("When the token is not supported", func() { - It("Should return 0", func() { - value, err := WalletProxy.ConvertToEther(nil, common.HexToAddress("0x1"), big.NewInt(100)) - Expect(err).ToNot(HaveOccurred()) - Expect(value.String()).To(Equal("0")) - }) - }) - - When("ether is converted to ether", func() { - - BeforeEach(func() { - tx, err := TokenWhitelist.AddTokens( - ControllerAdmin.TransactOpts(), - []common.Address{common.HexToAddress("0x0")}, - StringsToByte32("ETH"), - []*big.Int{DecimalsToMagnitude(big.NewInt(18))}, - []bool{true}, - []bool{true}, - big.NewInt(20180913153211), - ) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - BeforeEach(func() { - tx, err := TokenWhitelist.UpdateTokenRate( - ControllerAdmin.TransactOpts(), - common.HexToAddress("0x0"), - EthToWei(1), - big.NewInt(20180913153211), - ) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - It("Should return the same amount", func() { - value, err := WalletProxy.ConvertToEther(nil, common.HexToAddress("0x0"), big.NewInt(100)) - Expect(err).ToNot(HaveOccurred()) - Expect(value.String()).To(Equal("100")) - }) - - }) - -}) diff --git a/test/wallet/convert_to_stablecoin_test.go b/test/wallet/convert_to_stablecoin_test.go index 77b68866..1267c7ff 100644 --- a/test/wallet/convert_to_stablecoin_test.go +++ b/test/wallet/convert_to_stablecoin_test.go @@ -72,11 +72,11 @@ var _ = Describe("convertToStablecoin", func() { }) When("overflow does not occur", func() { - It("Should return 0.1(amount)*0.1(rate)/0.1(stablecoin rate)*10^6(in Mwei)", func() { + It("Should return 0.1(amount)*0.1(rate)/0.1(stablecoin rate)*10^18(in Eth)", func() { value, err := WalletProxy.ConvertToStablecoin(nil, common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), big.NewInt(int64(0.1*math.Pow10(8)))) Expect(err).ToNot(HaveOccurred()) - finalAmount := MweiToWei(1) - finalAmount.Div(finalAmount, big.NewInt(10)) //the final amount should be 0.1*0.1*10*1USDC => 1/10 MweiToWei , USDC decimals = 6 + finalAmount := EthToWei(1) + finalAmount.Div(finalAmount, big.NewInt(10)) //the final amount should be 0.1*0.1*10*1DAI => 1/10 EthToWei , DAI decimals = 18 Expect(value.String()).To(Equal(finalAmount.String())) }) }) @@ -98,7 +98,7 @@ var _ = Describe("convertToStablecoin", func() { It("Should return 0.1(amount)*5.09(rate)/0.1(stablecoin rate)*10^6(in Mwei)", func() { value, err := WalletProxy.ConvertToStablecoin(nil, common.HexToAddress("0xfe209bdE5CA32fa20E6728A005F26D651FFF5982"), big.NewInt(int64(0.1*math.Pow10(8)))) Expect(err).ToNot(HaveOccurred()) - finalAmount := MweiToWei(509) + finalAmount := EthToWei(509) finalAmount.Div(finalAmount, big.NewInt(100)) //the final amount should be 0.1*5.09*10*1ETH => 5.09 ETH => 509/100 Expect(value.String()).To(Equal(finalAmount.String())) }) @@ -108,11 +108,11 @@ var _ = Describe("convertToStablecoin", func() { }) }) - When("the token is not available", func() { - It("Should revert", func() { - _, err := WalletProxy.ConvertToStablecoin(nil, common.HexToAddress("0x1"), big.NewInt(100)) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("token not available")) + Context("When the token is not available", func() { + It("Should return 0", func() { + value, err := WalletProxy.ConvertToStablecoin(nil, common.HexToAddress("0x1"), big.NewInt(100)) + Expect(err).ToNot(HaveOccurred()) + Expect(value.String()).To(Equal("0")) }) }) @@ -158,10 +158,10 @@ var _ = Describe("convertToStablecoin", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - It("Should return 0.1(amount)/0.001(stablecoin rate)*10^6(in Mwei)", func() { + It("Should return 0.1(amount)/0.001(stablecoin rate)*10^18(in Eth)", func() { value, err := WalletProxy.ConvertToStablecoin(nil, common.HexToAddress("0x0"), big.NewInt(int64(0.1*math.Pow10(18)))) Expect(err).ToNot(HaveOccurred()) - finalAmount := MweiToWei(1) + finalAmount := EthToWei(1) finalAmount.Mul(finalAmount, big.NewInt(100)) //the final amount should be 0.1*1000*1ETH => 1*100 ETH Expect(value.String()).To(Equal(finalAmount.String())) }) diff --git a/test/wallet/daily_limit_test.go b/test/wallet/daily_limit_test.go new file mode 100644 index 00000000..69e60b17 --- /dev/null +++ b/test/wallet/daily_limit_test.go @@ -0,0 +1,344 @@ +package wallet_test + +import ( + "math/big" + "time" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/tokencard/contracts/v3/test/shared" + "github.com/tokencard/ethertest" +) + +var _ = Describe("Daily limit", func() { + + BeforeEach(func() { + BankAccount.MustTransfer(Backend, Controller.Address(), EthToWei(1)) + }) + + When("the contract just has been deployed", func() { + + It("should have initial daily limit of 10000$", func() { + ll, err := WalletProxy.DailyLimitValue(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(ll.String()).To(Equal(EthToWei(10000).String())) + + ll, err = WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(ll.String()).To(Equal(EthToWei(10000).String())) + }) + + It("should emit InitializedDailyLimit event", func() { + it, err := WalletProxy.FilterInitializedDailyLimit(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Amount.String()).To(Equal(EthToWei(10000).String())) + initTime := Backend.Blockchain().CurrentHeader().Time + 24*60*60 - 10 + Expect(evt.NextReset.String()).To(Equal(big.NewInt(int64(initTime)).String())) + }) + }) + + When("the controller tries to submit a new daily limit", func() { + It("should fail", func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(100000)), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + }) + }) + + When("the controller tries to confirm with amount=0", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(100000)), big.NewInt(0)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + }) + }) + + When("a random person submits a daily limit of 1 Finney", func() { + It("should fail", func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(RandomAccount.TransactOpts(ethertest.WithGasLimit(65000)), FinneyToWei(1)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + }) + }) + + Describe("Changing daily limit", func() { + + When("Owner sets the DailyLimit to 1000 $USD", func() { + BeforeEach(func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(1000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should emit a UpdatedAvailableDailyLimit event", func() { + it, err := WalletProxy.FilterUpdatedAvailableDailyLimit(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Amount.String()).To(Equal(EthToWei(1000).String())) + initTime := Backend.Blockchain().CurrentHeader().Time + 24*60*60 - 20 + Expect(evt.NextReset.String()).To(Equal(big.NewInt(int64(initTime)).String())) + }) + + It("should emit a daily limit set event", func() { + it, err := WalletProxy.FilterSetDailyLimit(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.Amount).To(Equal(EthToWei(1000))) + }) + + It("should lower the available amount to 1000 $USD", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(av.String()).To(Equal(EthToWei(1000).String())) + }) + + It("should have a new limit of 1000 $USD", func() { + sl, err := WalletProxy.DailyLimitValue(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(sl.String()).To(Equal(EthToWei(1000).String())) + }) + + It("should have a pending limit of 1000 $USD", func() { + ptl, err := WalletProxy.DailyLimitPending(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(ptl.String()).To(Equal(EthToWei(1000).String())) + }) + + When("the controller tries to confirm with amount=0", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(100000)), big.NewInt(0)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + }) + }) + + When("I transfer 1$", func() { + BeforeEach(func() { + + tx, err := Stablecoin.Credit(BankAccount.TransactOpts(), WalletProxyAddress, EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.Transfer(Owner.TransactOpts(), RandomAccount.Address(), StablecoinAddress, EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should emit a UpdatedAvailableDailyLimit event", func() { + it, err := WalletProxy.FilterUpdatedAvailableDailyLimit(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Amount.String()).To(Equal(EthToWei(999).String())) + initTime := Backend.Blockchain().CurrentHeader().Time + 24*60*60 - 40 + Expect(evt.NextReset.String()).To(Equal(big.NewInt(int64(initTime)).String())) + }) + + It("should have 9999 available", func() { + sa, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(sa.String()).To(Equal(EthToWei(999).String())) + }) + + When("the controller tries to confirm with amount=1000$", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(65000)), EthToWei(1000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("limit should be greater than current one")) + }) + }) + }) + }) + + When("I submit 2 Dailylimits of 12K and 11K USD respectively", func() { + BeforeEach(func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(11000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should emit 2 submission events", func() { + it, err := WalletProxy.FilterSubmittedDailyLimitUpdate(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeTrue()) + Expect(evt.Amount).To(Equal(EthToWei(12000))) + evt = it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Amount).To(Equal(EthToWei(11000))) + }) + + It("should have a pending limit of 11K $", func() { + ptl, err := WalletProxy.DailyLimitPending(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(ptl.String()).To(Equal(EthToWei(11000).String())) + }) + + When("the Owner tries to re-submit a limit of 13K $USD", func() { + BeforeEach(func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(13000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should set pending limit to 13K $USD", func() { + psl, err := WalletProxy.DailyLimitPending(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(psl.String()).To(Equal(EthToWei(13000).String())) + }) + }) + + When("the owner tries to confirm the daily limit", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(65000)), EthToWei(11000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + }) + }) + + When("a random person tries to confirm the daily limit", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(RandomAccount.TransactOpts(ethertest.WithGasLimit(65000)), EthToWei(11000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isGasExhausted(tx, 65000)).To(BeFalse()) + Expect(isSuccessful(tx)).To(BeFalse()) + }) + }) + + When("the controller confirms the limit using the wrong amount", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(100000)), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isGasExhausted(tx, 100000)).To(BeFalse()) + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("confirmed or submitted limit mismatch")) + }) + }) + + When("the controller confirms the limit with the right amount", func() { + BeforeEach(func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(), EthToWei(11000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should have 11K USD available", func() { + ll, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(ll.String()).To(Equal(EthToWei(11000).String())) + }) + + It("should emit a UpdatedAvailableDailyLimit event", func() { + it, err := WalletProxy.FilterUpdatedAvailableDailyLimit(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Amount.String()).To(Equal(EthToWei(11000).String())) + initTime := Backend.Blockchain().CurrentHeader().Time + 24*60*60 + Expect(evt.NextReset.String()).To(Equal(big.NewInt(int64(initTime)).String())) + }) + + When("the controller tries to re-confirm", func() { + It("should fail", func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(65000)), EthToWei(11000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("limit should be greater than current one")) + }) + }) + + When("I submit a second limit of 12k USD", func() { + BeforeEach(func() { + tx, err := WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + When("the controller confirms the submitted limit", func() { + BeforeEach(func() { + tx, err := WalletProxy.ConfirmDailyLimitUpdate(Controller.TransactOpts(), EthToWei(12000)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should have 12k USD available for spending", func() { + tl, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(tl.String()).To(Equal(EthToWei(12000).String())) + }) + + It("should emit a UpdatedAvailableDailyLimit event", func() { + it, err := WalletProxy.FilterUpdatedAvailableDailyLimit(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Amount.String()).To(Equal(EthToWei(12000).String())) + initTime := Backend.Blockchain().CurrentHeader().Time + 24*60*60 + Expect(evt.NextReset.String()).To(Equal(big.NewInt(int64(initTime)).String())) + }) + + When("I wait for 24 hours", func() { + BeforeEach(func() { + Backend.AdjustTime(time.Hour*24 + time.Second) + Backend.Commit() + }) + + It("should have 12k USD available for spending", func() { + ll, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(ll.String()).To(Equal(EthToWei(12000).String())) + }) + + }) + + }) + + }) + + }) + + }) + + }) + +}) diff --git a/test/wallet/execute_privileged_relayed_transaction_test.go b/test/wallet/execute_privileged_relayed_transaction_test.go new file mode 100644 index 00000000..0de12a12 --- /dev/null +++ b/test/wallet/execute_privileged_relayed_transaction_test.go @@ -0,0 +1,351 @@ +package wallet_test + +import ( + "context" + "fmt" + "math/big" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/tokencard/contracts/v3/test/shared" + "github.com/tokencard/ethertest" +) + +var _ = Describe("executePrivilegedRelayedTransaction", func() { + + BeforeEach(func() { + BankAccount.MustTransfer(Backend, WalletProxyAddress, EthToWei(4)) + }) + + When("a random account tries to relay", func() { + It("should fail", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecutePrivilegedRelayedTransaction(RandomAccount.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not a Monolith 2FA")) + }) + }) + + When("2FA tries to relay a transaction signed by a random account", func() { + It("should fail", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + privateKey, _ := crypto.GenerateKey() + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, privateKey) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecutePrivilegedRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("invalid signature")) + }) + }) + + When("2FA tries to relay two owner-signed transactions: send value(no data) + transfer() with a value above the daily limit", func() { + + BeforeEach(func() { + // Add ERC20 token to tokenWhitelist and update token rate to be equal to 1 (1 token = 1 ETH) + tx, err := TokenWhitelist.AddTokens( + ControllerAdmin.TransactOpts(), + []common.Address{ERC20Contract1Address}, + StringsToByte32( + "ERC1", + ), + []*big.Int{ + DecimalsToMagnitude(big.NewInt(18)), + }, + []bool{true}, + []bool{true}, + big.NewInt(20180913153211), + ) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + tx, err = TokenWhitelist.UpdateTokenRate(ControllerAdmin.TransactOpts(), ERC20Contract1Address, EthToWei(1), big.NewInt(20180913153211)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + // Reduce the daily limit to 100$ + tx, err = WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), MweiToWei(100)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + // credit wallet with 1 token + tx, err = ERC20Contract1.Credit(BankAccount.TransactOpts(), WalletProxyAddress, EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should reduce the available daily balance", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(av.String()).To(Equal(MweiToWei(100).String())) + }) + + When("the the privileged mode is used they succeed", func() { + BeforeEach(func() { + // send value (1 ETH) > 100$ + data1 := fmt.Sprintf("%s%s%s", RandomAccount.Address(), abi.U256(EthToWei(1)), abi.U256(big.NewInt(0))) + // use wallet's ERC20 transfer to transfer the token + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data2, err := a.Pack("transfer", RandomAccount.Address(), ERC20Contract1Address, EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s%s", data1, WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data2)))), data2)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecutePrivilegedRelayedTransaction(Controller.TransactOpts(), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should emit an ExecutedRelayedTransaction event", func() { + it, err := WalletProxy.FilterExecutedRelayedTransaction(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + data1 := []byte(fmt.Sprintf("%s%s%s", RandomAccount.Address(), abi.U256(EthToWei(1)), abi.U256(big.NewInt(0)))) + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data2, err := a.Pack("transfer", RandomAccount.Address(), ERC20Contract1Address, EthToWei(1)) + batchData := []byte(fmt.Sprintf("%s%s%s%s%s", data1, WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data2)))), data2)) + Expect(evt.Data).To(Equal(batchData)) + Expect(evt.Privileged).To(Equal(true)) + }) + + It("should emit 2 ExecutedTransaction events", func() { + it, err := WalletProxy.FilterExecutedTransaction(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeTrue()) + Expect(evt.Destination).To(Equal(RandomAccount.Address())) + Expect(evt.Value.String()).To(Equal(EthToWei(1).String())) + Expect(evt.Data).To(Equal(common.Hex2Bytes(""))) + Expect(evt.ReturnData).To(Equal(common.Hex2Bytes(""))) + evt = it.Event + Expect(it.Next()).To(BeFalse()) + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), ERC20Contract1Address, EthToWei(1)) + Expect(evt.Destination).To(Equal(WalletProxyAddress)) + Expect(evt.Value.String()).To(Equal("0")) + Expect(evt.Data).To(Equal(data)) + Expect(evt.ReturnData).To(Equal(common.Hex2Bytes(""))) + }) + + It("should decrease the wallet's ETH balance ", func() { + b, err := Backend.BalanceAt(context.Background(), WalletProxyAddress, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(b.String()).To(Equal(EthToWei(3).String())) + }) + + It("should decrease TKN balance of the wallet", func() { + b, err := ERC20Contract1.BalanceOf(nil, WalletProxyAddress) + Expect(err).ToNot(HaveOccurred()) + Expect(b.String()).To(Equal("0")) + }) + + It("should reset privileged back to false", func() { + p, err := WalletProxy.Privileged(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(p).To(BeFalse()) + }) + + It("should fail when trying to replay", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecutePrivilegedRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("tx replay")) + }) + + It("should succeed when increasing the nonce", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(1) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecutePrivilegedRelayedTransaction(Controller.TransactOpts(), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + }) + + When("the the non-privileged mode is used each one of them fails separately due to having exceeded the limit ", func() { + It("should fail when transfering 1 ETH (>100$)", func() { + // send value (1 ETH) > 100$ + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(1)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(200000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("available smaller than amount")) + }) + + It("should fail when transfering 1 token (>100$)", func() { + // use wallet's ERC20 transfer to transfer the token + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), ERC20Contract1Address, EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(1)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(200000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("available smaller than amount")) + + }) + + }) + }) + + When("transfering to 0 address)", func() { + It("should return the error string emitted by require", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", common.HexToAddress("0x0"), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecutePrivilegedRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("destination=0")) + }) + }) + + When("the owner increases the nonce before the relayer relayes the transaction", func() { + BeforeEach(func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", common.HexToAddress("0x0"), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.IncreaseRelayNonce(Owner.TransactOpts()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.IncreaseRelayNonce(Owner.TransactOpts()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.ExecutePrivilegedRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("tx replay")) + }) + + It("should emit an IncreasedRelayNonce event", func() { + it, err := WalletProxy.FilterIncreasedRelayNonce(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.CurrentNonce.String()).To(Equal("1")) + Expect(it.Next()).To(BeTrue()) + evt = it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.CurrentNonce.String()).To(Equal("2")) + }) + }) + +}) diff --git a/test/wallet/execute_relayed_transaction_test.go b/test/wallet/execute_relayed_transaction_test.go new file mode 100644 index 00000000..11a9ce3b --- /dev/null +++ b/test/wallet/execute_relayed_transaction_test.go @@ -0,0 +1,274 @@ +package wallet_test + +import ( + "context" + "fmt" + "math/big" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/tokencard/contracts/v3/test/shared" + "github.com/tokencard/ethertest" +) + +var _ = Describe("executeRelayedTransaction", func() { + + BeforeEach(func() { + BankAccount.MustTransfer(Backend, WalletProxyAddress, EthToWei(4)) + }) + + When("a non-owner account tries to increase the nonce", func() { + It("should fail", func() { + tx, err := WalletProxy.IncreaseRelayNonce(Controller.TransactOpts(ethertest.WithGasLimit(60000))) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not owner")) + }) + }) + + When("a random account tries to relay", func() { + It("should fail", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(RandomAccount.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("sender is not controller")) + }) + }) + + When("a controller tries to relay a transaction signed by a random account", func() { + It("should fail", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + privateKey, _ := crypto.GenerateKey() + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, privateKey) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(1000000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("invalid signature")) + }) + }) + + When("a controller tries to relay two owner-signed transactions: send value(no data) + transfer()", func() { + + When("the call succeeds", func() { + BeforeEach(func() { + + // send value (1 ETH) + data1 := fmt.Sprintf("%s%s%s", RandomAccount.Address(), abi.U256(EthToWei(1)), abi.U256(big.NewInt(0))) + // use wallet's transfer + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data2, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s%s", data1, WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data2)))), data2)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(1000000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + + It("should emit an IncreasedRelayNonce event", func() { + it, err := WalletProxy.FilterIncreasedRelayNonce(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Controller.Address())) + Expect(evt.CurrentNonce.String()).To(Equal("1")) + }) + + It("should emit an ExecutedRelayedTransaction event", func() { + it, err := WalletProxy.FilterExecutedRelayedTransaction(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeFalse()) + data1 := []byte(fmt.Sprintf("%s%s%s", RandomAccount.Address(), abi.U256(EthToWei(1)), abi.U256(big.NewInt(0)))) + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data2, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + batchData := []byte(fmt.Sprintf("%s%s%s%s%s", data1, WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data2)))), data2)) + Expect(evt.Data).To(Equal(batchData)) + Expect(evt.Privileged).To(Equal(false)) + }) + + It("should emit 2 ExecutedTransaction events", func() { + it, err := WalletProxy.FilterExecutedTransaction(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(it.Next()).To(BeTrue()) + Expect(evt.Destination).To(Equal(RandomAccount.Address())) + Expect(evt.Value.String()).To(Equal(EthToWei(1).String())) + Expect(evt.Data).To(Equal(common.Hex2Bytes(""))) + Expect(evt.ReturnData).To(Equal(common.Hex2Bytes(""))) + evt = it.Event + Expect(it.Next()).To(BeFalse()) + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(evt.Destination).To(Equal(WalletProxyAddress)) + Expect(evt.Value.String()).To(Equal("0")) + Expect(evt.Data).To(Equal(data)) + Expect(evt.ReturnData).To(Equal(common.Hex2Bytes(""))) + }) + + It("should decrease the wallet's ETH balance ", func() { + b, err := Backend.BalanceAt(context.Background(), WalletProxyAddress, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(b.String()).To(Equal(EthToWei(2).String())) + }) + + It("should fail when trying to replay", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("tx replay")) + }) + + It("should succeed when increasing the nonce", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", RandomAccount.Address(), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(1) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + }) + }) + }) + + When("transfering to 0 address", func() { + It("should return the error string emitted by require", func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", common.HexToAddress("0x0"), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("destination=0")) + }) + }) + + When("the owner increases the nonce before the relayer relayes the transaction", func() { + BeforeEach(func() { + a, err := abi.JSON(strings.NewReader(WALLET_ABI)) + Expect(err).ToNot(HaveOccurred()) + data, err := a.Pack("transfer", common.HexToAddress("0x0"), common.HexToAddress("0x0"), EthToWei(1)) + Expect(err).ToNot(HaveOccurred()) + + batch := []byte(fmt.Sprintf("%s%s%s%s", WalletProxyAddress, abi.U256(EthToWei(0)), abi.U256(big.NewInt(int64(len(data)))), data)) + + nonce := big.NewInt(0) + chainId := big.NewInt(1337) + signature, err := SignData(chainId, WalletProxyAddress, nonce, batch, Owner.PrivKey()) + Expect(err).ToNot(HaveOccurred()) + + tx, err := WalletProxy.IncreaseRelayNonce(Owner.TransactOpts()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.IncreaseRelayNonce(Owner.TransactOpts()) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + tx, err = WalletProxy.ExecuteRelayedTransaction(Controller.TransactOpts(ethertest.WithGasLimit(500000)), nonce, batch, signature) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeFalse()) + + returnData, _ := ethCall(tx) + Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("tx replay")) + }) + + It("should emit an IncreasedRelayNonce event", func() { + it, err := WalletProxy.FilterIncreasedRelayNonce(nil) + Expect(err).ToNot(HaveOccurred()) + Expect(it.Next()).To(BeTrue()) + evt := it.Event + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.CurrentNonce.String()).To(Equal("1")) + Expect(it.Next()).To(BeTrue()) + evt = it.Event + Expect(it.Next()).To(BeFalse()) + Expect(evt.Sender).To(Equal(Owner.Address())) + Expect(evt.CurrentNonce.String()).To(Equal("2")) + }) + }) + +}) diff --git a/test/wallet/execute_transaction_test.go b/test/wallet/execute_transaction_test.go index f4e0bd46..df7a2fee 100644 --- a/test/wallet/execute_transaction_test.go +++ b/test/wallet/execute_transaction_test.go @@ -19,9 +19,20 @@ import ( var _ = Describe("executeTransaction", func() { - Context("when the wallet has enough ETH", func() { + Context("when the wallet has enough ETH, the daily limit is 100$ and the rate is 1", func() { BeforeEach(func() { BankAccount.MustTransfer(Backend, WalletProxyAddress, EthToWei(101)) + + tx, err := TokenWhitelist.UpdateTokenRate(ControllerAdmin.TransactOpts(), StablecoinAddress, EthToWei(1), big.NewInt(20180913153211)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) + + // Set the limit to 100$ + tx, err = WalletProxy.SubmitDailyLimitUpdate(Owner.TransactOpts(), EthToWei(100)) + Expect(err).ToNot(HaveOccurred()) + Backend.Commit() + Expect(isSuccessful(tx)).To(BeTrue()) }) var tx *types.Transaction @@ -34,11 +45,11 @@ var _ = Describe("executeTransaction", func() { When("the destination address is not whitelisted", func() { BeforeEach(func() { - spendLimit, err = WalletProxy.SpendLimitAvailable(nil) + spendLimit, err = WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) privateKey, _ := crypto.GenerateKey() randomAddress = crypto.PubkeyToAddress(privateKey.PublicKey) - tx, err = WalletProxy.ExecuteTransaction(Owner.TransactOpts(ethertest.WithGasLimit(100000)), randomAddress, FinneyToWei(500), nil) + tx, err = WalletProxy.ExecuteTransaction(Owner.TransactOpts(), randomAddress, FinneyToWei(500), nil) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) @@ -51,8 +62,10 @@ var _ = Describe("executeTransaction", func() { }) It("should reduce the available daily spend balance", func() { - spendLimit.Sub(spendLimit, FinneyToWei(500)) - sl, err := WalletProxy.SpendLimitAvailable(nil) + stableValue, err := WalletProxy.ConvertToStablecoin(nil, common.HexToAddress("0x0"), FinneyToWei(500)) + Expect(err).ToNot(HaveOccurred()) + spendLimit.Sub(spendLimit, stableValue) + sl, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(sl.String()).To(Equal(spendLimit.String())) }) @@ -92,9 +105,9 @@ var _ = Describe("executeTransaction", func() { }) It("should reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - sl, err := WalletProxy.SpendLimitValue(nil) + sl, err := WalletProxy.DailyLimitValue(nil) Expect(err).ToNot(HaveOccurred()) sl.Sub(sl, FinneyToWei(500)) Expect(av.String()).To(Equal(sl.String())) @@ -116,7 +129,7 @@ var _ = Describe("executeTransaction", func() { }) }) - When("the value sent is more than the daily spend limit", func() { + When("the value sent is more than the daily limit", func() { It("should fail", func() { privateKey, _ := crypto.GenerateKey() randomAddress = crypto.PubkeyToAddress(privateKey.PublicKey) @@ -127,7 +140,7 @@ var _ = Describe("executeTransaction", func() { }) }) - When("the value sent is exactly equal to the daily spend limit", func() { + When("the value sent is exactly equal to the daily limit", func() { BeforeEach(func() { privateKey, _ := crypto.GenerateKey() randomAddress = crypto.PubkeyToAddress(privateKey.PublicKey) @@ -149,8 +162,8 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal(EthToWei(1).String())) }) - It("should reduce the available daily spend balance to 0", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should reduce the available daily balance to 0", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(av.String()).To(Equal("0")) }) @@ -181,7 +194,7 @@ var _ = Describe("executeTransaction", func() { }) BeforeEach(func() { - spendLimit, err = WalletProxy.SpendLimitAvailable(nil) + spendLimit, err = WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) tx, err = WalletProxy.ExecuteTransaction(Owner.TransactOpts(ethertest.WithGasLimit(100000)), randomAddress, FinneyToWei(500), nil) Expect(err).ToNot(HaveOccurred()) @@ -195,8 +208,8 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal(FinneyToWei(500).String())) }) - It("should NOT reduce the available daily spend balance", func() { - sl, err := WalletProxy.SpendLimitAvailable(nil) + It("should NOT reduce the available daily balance", func() { + sl, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(sl.String()).To(Equal(spendLimit.String())) }) @@ -259,10 +272,10 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("700")) }) - It("should reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should reduce the available daily balance", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - eth, err := WalletProxy.ConvertToEther(nil, TKNBurnerAddress, big.NewInt(300)) + eth, err := WalletProxy.ConvertToStablecoin(nil, TKNBurnerAddress, big.NewInt(300)) Expect(err).ToNot(HaveOccurred()) av.Sub(av, eth) //subtract converted eth from dailySppendLimit Expect(av.String()).To(Equal(av.String())) @@ -309,10 +322,10 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("700")) }) - It("should reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should reduce the available daily balance", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - eth, err := WalletProxy.ConvertToEther(nil, TKNBurnerAddress, big.NewInt(300)) + eth, err := WalletProxy.ConvertToStablecoin(nil, TKNBurnerAddress, big.NewInt(300)) Expect(err).ToNot(HaveOccurred()) av.Sub(av, eth) //subtract converted eth from dailySppendLimit Expect(av.String()).To(Equal(av.String())) @@ -421,8 +434,8 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("1000")) }) - It("should not reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should not reduce the available daily balance", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(av.String()).To(Equal("100000000000000000000")) }) @@ -454,8 +467,8 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("700")) }) - It("should not reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should not reduce the available daily balance", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(av.String()).To(Equal("100000000000000000000")) }) @@ -495,7 +508,7 @@ var _ = Describe("executeTransaction", func() { }) It("should not reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(av.String()).To(Equal("100000000000000000000")) }) @@ -517,7 +530,7 @@ var _ = Describe("executeTransaction", func() { Expect(isSuccessful(tx)).To(BeTrue()) RandomWalletProxy, err = bindings.NewWallet(RandomWalletProxyAddress, Backend) - tx, err = RandomWalletProxy.InitializeWallet(BankAccount.TransactOpts(), RandomAccount.Address(), false, ENSRegistryAddress, TokenWhitelistNode, ControllerNode, LicenceNode, EthToWei(1)) + tx, err = RandomWalletProxy.InitializeWallet(BankAccount.TransactOpts(), RandomAccount.Address(), false, ENSRegistryAddress, TokenWhitelistNode, ControllerNode, LicenceNode, big.NewInt(1000)) Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) @@ -547,11 +560,11 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("1000")) }) - It("should reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + It("should reduce the available daily balance", func() { + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - sl, _ := WalletProxy.SpendLimitValue(nil) - eth, err := WalletProxy.ConvertToEther(nil, TKNBurnerAddress, big.NewInt(300)) + sl, _ := WalletProxy.DailyLimitValue(nil) + eth, err := WalletProxy.ConvertToStablecoin(nil, TKNBurnerAddress, big.NewInt(300)) Expect(err).ToNot(HaveOccurred()) sl.Sub(sl, eth) //subtract converted eth from dailySppendLimit Expect(av.String()).To(Equal(sl.String())) @@ -590,10 +603,10 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("700")) }) - It("should NOT reduce the available daily spend balance", func() { - av, err := RandomWalletProxy.SpendLimitAvailable(nil) + It("should NOT reduce the available daily balance", func() { + av, err := RandomWalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - Expect(av.String()).To(Equal(EthToWei(1).String())) + Expect(av.String()).To(Equal(EthToWei(1000).String())) }) }) @@ -622,18 +635,18 @@ var _ = Describe("executeTransaction", func() { Expect(b.String()).To(Equal("700")) }) - It("should reduce the available daily spend balance", func() { - av, err := RandomWalletProxy.SpendLimitAvailable(nil) + It("should reduce the available daily balance", func() { + av, err := RandomWalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) - sl, _ := RandomWalletProxy.SpendLimitValue(nil) - eth, err := RandomWalletProxy.ConvertToEther(nil, TKNBurnerAddress, big.NewInt(300)) + sl, _ := RandomWalletProxy.DailyLimitValue(nil) + eth, err := RandomWalletProxy.ConvertToStablecoin(nil, TKNBurnerAddress, big.NewInt(300)) Expect(err).ToNot(HaveOccurred()) sl.Sub(sl, eth) //subtract converted eth from dailySppendLimit Expect(av.String()).To(Equal(sl.String())) }) }) - When("the approved random wallet tries to 'transferFrom' more than the approved ammount to itself using 'executeTransaction'", func() { + When("the approved random wallet tries to 'transferFrom' more than the approved amount to itself using 'executeTransaction'", func() { It("should fail", func() { a, err := abi.JSON(strings.NewReader(ERC20ABI)) Expect(err).ToNot(HaveOccurred()) @@ -685,7 +698,7 @@ var _ = Describe("executeTransaction", func() { }) It("should NOT reduce the available daily spend balance", func() { - av, err := WalletProxy.SpendLimitAvailable(nil) + av, err := WalletProxy.DailyLimitAvailable(nil) Expect(err).ToNot(HaveOccurred()) Expect(av.String()).To(Equal(EthToWei(100).String())) }) diff --git a/test/wallet/load_ERC20_test.go b/test/wallet/load_ERC20_test.go index beb3bac9..445f0796 100644 --- a/test/wallet/load_ERC20_test.go +++ b/test/wallet/load_ERC20_test.go @@ -47,7 +47,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(b.String()).To(Equal("1000")) }) - It("should increase the ERC20 type-2 balance of the Wallet by 2", func() { + It("should increase the ERC20 type-2 balance of the Wallet by 500", func() { b, err := ERC20Contract2.BalanceOf(nil, WalletProxyAddress) Expect(err).ToNot(HaveOccurred()) Expect(b.String()).To(Equal("500")) @@ -101,7 +101,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - When("a valid amount is transfered ", func() { + When("a valid amount is transferred ", func() { BeforeEach(func() { tx, err := WalletProxy.LoadTokenCard(Owner.TransactOpts(), ERC20Contract1Address, big.NewInt(101)) @@ -117,7 +117,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - It("Should emit 1 ERC20Contract1 Approval event", func() { + It("Should emit one ERC20Contract1 Approval event", func() { owner := []common.Address{WalletProxyAddress} spender := []common.Address{LicenceAddress} it, err := ERC20Contract1.FilterApproval(nil, owner, spender) @@ -130,7 +130,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(evt.Value.String()).To(Equal("101")) }) - It("Should emit 1 ERC20Contract2 Approval event", func() { + It("Should emit one ERC20Contract2 Approval event", func() { owner := []common.Address{WalletProxyAddress} spender := []common.Address{LicenceAddress} it, err := ERC20Contract2.FilterApproval(nil, owner, spender) @@ -143,7 +143,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(evt.Value.String()).To(Equal("2")) }) - It("Should emit 2 TransferredToTokenHolder events", func() { + It("Should emit two TransferredToTokenHolder events", func() { it, err := Licence.FilterTransferredToTokenHolder(nil) Expect(err).ToNot(HaveOccurred()) Expect(it.Next()).To(BeTrue()) @@ -161,7 +161,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(evt.Amount.String()).To(Equal("1")) }) - It("Should emit 2 TransferredToCryptoFloat events", func() { + It("Should emit two TransferredToCryptoFloat events", func() { it, err := Licence.FilterTransferredToCryptoFloat(nil) Expect(err).ToNot(HaveOccurred()) Expect(it.Next()).To(BeTrue()) @@ -179,7 +179,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(evt.Amount.String()).To(Equal("1")) }) - It("Should emit 2 ERC20Contract1 Transfer events", func() { + It("Should emit two ERC20Contract1 Transfer events", func() { from := []common.Address{WalletProxyAddress} var to []common.Address it, err := ERC20Contract1.FilterTransfer(nil, from, to) @@ -197,7 +197,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(evt.Amount.String()).To(Equal("100")) }) - It("Should emit 2 ERC20Contract2 Transfer events", func() { + It("Should emit two ERC20Contract2 Transfer events", func() { from := []common.Address{WalletProxyAddress} var to []common.Address it, err := ERC20Contract2.FilterTransfer(nil, from, to) @@ -215,7 +215,7 @@ var _ = Describe("wallet load ERC20", func() { Expect(evt.Amount.String()).To(Equal("1")) }) - It("Should emit 2 LoadedTokenCard events", func() { + It("Should emit two LoadedTokenCard events", func() { it, err := WalletProxy.FilterLoadedTokenCard(nil) Expect(err).ToNot(HaveOccurred()) Expect(it.Next()).To(BeTrue()) @@ -267,7 +267,7 @@ var _ = Describe("wallet load ERC20", func() { }) //equal to approval - When("a bigger amount than the one owned is tried to be transfered ", func() { + When("a bigger amount than the one owned is tried to be transferred ", func() { It("Should revert", func() { tx, err := WalletProxy.LoadTokenCard(Owner.TransactOpts(ethertest.WithGasLimit(300000)), ERC20Contract1Address, big.NewInt(1001)) @@ -287,10 +287,9 @@ var _ = Describe("wallet load ERC20", func() { }) //more than owned (and hence can be approved) - When("a bigger amount than daily Load limit is loaded", func() { + When("a bigger amount than daily load limit is loaded", func() { BeforeEach(func() { - //rate is 1 token => 1 ETH tx, err := TokenWhitelist.UpdateTokenRate( ControllerAdmin.TransactOpts(), ERC20Contract1Address, @@ -300,17 +299,6 @@ var _ = Describe("wallet load ERC20", func() { Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) - - // stablecoin rate is 10-6 - tx, err = TokenWhitelist.UpdateTokenRate( - ControllerAdmin.TransactOpts(), - StablecoinAddress, - big.NewInt(int64(0.001*math.Pow10(18))), - big.NewInt(20180913153211), - ) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) }) It("Should revert", func() { @@ -319,7 +307,7 @@ var _ = Describe("wallet load ERC20", func() { Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("available max load limit) after having set it", func() { - It("should fail", func() { - tx, err := WalletProxy.SetLoadLimit(Owner.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - - tx, err = WalletProxy.SubmitLoadLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(65000)), GweiToWei(10001)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isGasExhausted(tx, 100000)).To(BeFalse()) - Expect(isSuccessful(tx)).To(BeFalse()) - }) - }) - - When("controller submits daily load limit of 1K USD(> max load limit) after having set it", func() { - It("should fail", func() { - tx, err := WalletProxy.SetLoadLimit(Owner.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - - tx, err = WalletProxy.SubmitLoadLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(65000)), GweiToWei(1)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isGasExhausted(tx, 65000)).To(BeFalse()) - Expect(isSuccessful(tx)).To(BeFalse()) - }) - - }) - - When("a random person submits daily load limit of 0 USD after having set it", func() { - It("should fail", func() { - tx, err := WalletProxy.SetLoadLimit(Owner.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - - tx, err = WalletProxy.SubmitLoadLimitUpdate(RandomAccount.TransactOpts(ethertest.WithGasLimit(65000)), big.NewInt(0)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isGasExhausted(tx, 65000)).To(BeFalse()) - Expect(isSuccessful(tx)).To(BeFalse()) - }) - - }) - - When("I submit 2 Loadlimits of 2K and 1K USD respectively after having set it", func() { - BeforeEach(func() { - tx, err := WalletProxy.SetLoadLimit(Owner.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - - tx, err = WalletProxy.SubmitLoadLimitUpdate(Owner.TransactOpts(), GweiToWei(2)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - - tx, err = WalletProxy.SubmitLoadLimitUpdate(Owner.TransactOpts(), GweiToWei(1)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - It("should emit 2 submission events", func() { - it, err := WalletProxy.FilterSubmittedLoadLimitUpdate(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(it.Next()).To(BeTrue()) - evt := it.Event - Expect(it.Next()).To(BeTrue()) - Expect(evt.Amount).To(Equal(GweiToWei(2))) - evt = it.Event - Expect(it.Next()).To(BeFalse()) - Expect(evt.Amount).To(Equal(GweiToWei(1))) - }) - - It("should have pending load limit of 1K USD", func() { - ptl, err := WalletProxy.LoadLimitPending(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(ptl.String()).To(Equal(GweiToWei(1).String())) - }) - - When("the Owner tries to re-submit a load limit of 5K USD", func() { - BeforeEach(func() { - tx, err := WalletProxy.SubmitLoadLimitUpdate(Owner.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - It("should set pending load limit to 5K", func() { - psl, err := WalletProxy.LoadLimitPending(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(psl.String()).To(Equal(GweiToWei(5).String())) - }) - - When("the Owner tries to submit a second load limit of 5K USD", func() { - It("should succeed", func() { - tx, err := WalletProxy.SubmitLoadLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(65000)), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - }) - }) - - When("I try to confirm the load limit", func() { - It("should fail", func() { - tx, err := WalletProxy.ConfirmLoadLimitUpdate(Owner.TransactOpts(ethertest.WithGasLimit(65000)), GweiToWei(1)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeFalse()) - }) - }) - - When("a random person tries to confirm the load limit", func() { - It("should fail", func() { - tx, err := WalletProxy.ConfirmLoadLimitUpdate(RandomAccount.TransactOpts(ethertest.WithGasLimit(65000)), GweiToWei(1)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isGasExhausted(tx, 65000)).To(BeFalse()) - Expect(isSuccessful(tx)).To(BeFalse()) - }) - }) - - When("the controller confirms the load limit using the wrong amount", func() { - It("should fail", func() { - tx, err := WalletProxy.ConfirmLoadLimitUpdate(Controller.TransactOpts(ethertest.WithGasLimit(100000)), GweiToWei(2)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isGasExhausted(tx, 100000)).To(BeFalse()) - Expect(isSuccessful(tx)).To(BeFalse()) - }) - }) - - When("the controller confirms the load limit", func() { - BeforeEach(func() { - tx, err := WalletProxy.ConfirmLoadLimitUpdate(Controller.TransactOpts(), GweiToWei(1)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - It("should have 1K USD available for loading", func() { - ll, err := WalletProxy.LoadLimitAvailable(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(ll.String()).To(Equal(GweiToWei(1).String())) - }) - - When("I submit a second load limit to 5K USD", func() { - BeforeEach(func() { - tx, err := WalletProxy.SubmitLoadLimitUpdate(Owner.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - When("the controller confirms the load limit", func() { - BeforeEach(func() { - tx, err := WalletProxy.ConfirmLoadLimitUpdate(Controller.TransactOpts(), GweiToWei(5)) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) - }) - - It("should have 1K USD available for loading", func() { - tl, err := WalletProxy.LoadLimitAvailable(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(tl.String()).To(Equal(GweiToWei(1).String())) - }) - When("I wait for longer than a day", func() { - BeforeEach(func() { - Backend.AdjustTime(time.Hour * 25) - Backend.Commit() - }) - - It("should have 5K USD available for further loading", func() { - ll, err := WalletProxy.LoadLimitAvailable(nil) - Expect(err).ToNot(HaveOccurred()) - Expect(ll.String()).To(Equal(GweiToWei(5).String())) - }) - - }) - - }) - - }) - - }) - - }) - - }) - -}) diff --git a/test/wallet/load_non-complaint_ERC20_test.go b/test/wallet/load_non-complaint_ERC20_test.go index fd91f9d7..73083e0c 100644 --- a/test/wallet/load_non-complaint_ERC20_test.go +++ b/test/wallet/load_non-complaint_ERC20_test.go @@ -74,7 +74,7 @@ var _ = Describe("wallet load non-compliant ERC20", func() { Expect(isSuccessful(tx)).To(BeTrue()) }) - When("a valid amount is transfered ", func() { + When("a valid amount is transferred ", func() { BeforeEach(func() { tx, err := WalletProxy.LoadTokenCard(Owner.TransactOpts(), NonCompliantERC20Address, EthToWei(101)) @@ -181,10 +181,9 @@ var _ = Describe("wallet load non-compliant ERC20", func() { }) //more than owned (and hence can be approved) - When("a bigger amount than MAX daily Load limit is loaded", func() { + When("a bigger amount than daily limit is loaded", func() { BeforeEach(func() { - //rate is 1 token => 1 ETH tx, err := TokenWhitelist.UpdateTokenRate( ControllerAdmin.TransactOpts(), NonCompliantERC20Address, @@ -194,17 +193,6 @@ var _ = Describe("wallet load non-compliant ERC20", func() { Expect(err).ToNot(HaveOccurred()) Backend.Commit() Expect(isSuccessful(tx)).To(BeTrue()) - - // stablecoin rate is 10-6 - tx, err = TokenWhitelist.UpdateTokenRate( - ControllerAdmin.TransactOpts(), - StablecoinAddress, - big.NewInt(int64(0.001*math.Pow10(18))), - big.NewInt(20180913153211), - ) - Expect(err).ToNot(HaveOccurred()) - Backend.Commit() - Expect(isSuccessful(tx)).To(BeTrue()) }) It("Should revert", func() { @@ -213,10 +201,10 @@ var _ = Describe("wallet load non-compliant ERC20", func() { Backend.Commit() Expect(isSuccessful(tx)).To(BeFalse()) returnData, _ := ethCall(tx) - Expect(string(returnData[len(returnData)-64:])).To(ContainSubstring("available self.limitTimestamp.add(86400)", "source_mapping": {"start": 12835, "length": 39, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [277], "starting_column": 13, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "_getAvailableLimit", "source_mapping": {"start": 12736, "length": 240, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [276, 277, 278, 279, 280, 281, 282], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_getAvailableLimit(DailyLimitTrait.DailyLimit)"}}}}], "description": "DailyLimitTrait._getAvailableLimit(DailyLimitTrait.DailyLimit) (../../contracts/wallet.sol#276-282) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > self.limitTimestamp.add(86400) (../../contracts/wallet.sol#277)\n", "markdown": "[DailyLimitTrait._getAvailableLimit(DailyLimitTrait.DailyLimit)](../../contracts/wallet.sol#L276-L282) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > self.limitTimestamp.add(86400)](../../contracts/wallet.sol#L277)\n", "id": "a88a1183e45466591a276356c926ebf70a5ac492c7271546b57f1909cf4fb60d", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableLimit", "source_mapping": {"start": 14578, "length": 370, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [318, 319, 320, 321, 322, 323, 324, 325, 326], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableLimit(DailyLimitTrait.DailyLimit)"}}, {"type": "node", "name": "now > self.limitTimestamp.add(86400)", "source_mapping": {"start": 14656, "length": 39, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [319], "starting_column": 13, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableLimit", "source_mapping": {"start": 14578, "length": 370, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [318, 319, 320, 321, 322, 323, 324, 325, 326], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableLimit(DailyLimitTrait.DailyLimit)"}}}}], "description": "DailyLimitTrait._updateAvailableLimit(DailyLimitTrait.DailyLimit) (../../contracts/wallet.sol#318-326) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > self.limitTimestamp.add(86400) (../../contracts/wallet.sol#319)\n", "markdown": "[DailyLimitTrait._updateAvailableLimit(DailyLimitTrait.DailyLimit)](../../contracts/wallet.sol#L318-L326) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > self.limitTimestamp.add(86400)](../../contracts/wallet.sol#L319)\n", "id": "79967c539447e17dc6ee9c3ea09ef3fb94efe619db1c107e91000247e937d1b9", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 29844, "length": 567, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [664, 665, 666, 667, 668, 669, 670, 671, 672, 673], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 30285, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [670], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 29844, "length": 567, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [664, 665, 666, 667, 668, 669, 670, 671, 672, 673], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 30358, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [672], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 29844, "length": 567, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [664, 665, 666, 667, 668, 669, 670, 671, 672, 673], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#664-673):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#670)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#672)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L664-L673):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L670)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L672)\n", "id": "b3cf8530bb4219f6181fdec9d6e56a23dd51951afbacf23b2c46ee363b79da5d", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "Wallet.slitherConstructorVariables() (../../contracts/wallet.sol#508-847) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[Wallet.slitherConstructorVariables()](../../contracts/wallet.sol#L508-L847) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "2fe37a4cad071bfa6d82a1450bfeecafbc3e29abd64963b028105a4d9582ef0a", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "batchExecuteTransaction", "source_mapping": {"start": 30743, "length": 2016, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "batchExecuteTransaction(bytes)"}}], "description": "batchExecuteTransaction(bytes) should be declared external:\n\t- Wallet.batchExecuteTransaction(bytes) (../../contracts/wallet.sol#679-714)\n", "markdown": "batchExecuteTransaction(bytes) should be declared external:\n\t- [Wallet.batchExecuteTransaction(bytes)](../../contracts/wallet.sol#L679-L714)\n", "id": "25be393b22a852005aebc844d44187435f0cfff81e7632ced668dd912f0e2261", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "transfer", "source_mapping": {"start": 38268, "length": 1127, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "transfer(address,address,uint256)"}}], "description": "transfer(address,address,uint256) should be declared external:\n\t- Wallet.transfer(address,address,uint256) (../../contracts/wallet.sol#822-846)\n", "markdown": "transfer(address,address,uint256) should be declared external:\n\t- [Wallet.transfer(address,address,uint256)](../../contracts/wallet.sol#L822-L846)\n", "id": "b19b3dda14789ad85379258374bd5193fe48580bb2ea18c14a6866357ec7209b", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}}], "description": "Licence.load(address,uint256) (../../contracts/licence.sol#201-223) sends eth to arbitrary user\n\tDangerous calls:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n", "markdown": "[Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223) sends eth to arbitrary user\n\tDangerous calls:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n", "id": "77a1d9fb3657ae0373a1ee2191c5fba1c04170d16f4a8c073a174eedb2b6bc4b", "check": "arbitrary-send", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)", "source_mapping": {"start": 8589, "length": 72, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [211], "starting_column": 17, "ending_column": 89}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)", "source_mapping": {"start": 8679, "length": 69, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [212], "starting_column": 17, "ending_column": 86}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)", "source_mapping": {"start": 8985, "length": 78, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [219], "starting_column": 13, "ending_column": 91}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Licence.load(address,uint256) (../../contracts/licence.sol#201-223):\n\tExternal calls:\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount) (../../contracts/licence.sol#211)\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount) (../../contracts/licence.sol#212)\n\tExternal calls sending eth:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n\tEvent emitted after the call(s):\n\t- TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount) (../../contracts/licence.sol#219)\n", "markdown": "Reentrancy in [Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223):\n\tExternal calls:\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)](../../contracts/licence.sol#L211)\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)](../../contracts/licence.sol#L212)\n\tExternal calls sending eth:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n\tEvent emitted after the call(s):\n\t- [TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)](../../contracts/licence.sol#L219)\n", "id": "ab8f3835605e2d6159e5db4f37dce11ccdcd6f5bd12fff12d51622a9cb8e5453", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)", "source_mapping": {"start": 8282, "length": 69, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [205], "starting_column": 13, "ending_column": 82}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)", "source_mapping": {"start": 8589, "length": 72, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [211], "starting_column": 17, "ending_column": 89}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)", "source_mapping": {"start": 8679, "length": 69, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [212], "starting_column": 17, "ending_column": 86}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)", "source_mapping": {"start": 9084, "length": 75, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [222], "starting_column": 9, "ending_column": 84}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Licence.load(address,uint256) (../../contracts/licence.sol#201-223):\n\tExternal calls:\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount) (../../contracts/licence.sol#205)\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount) (../../contracts/licence.sol#211)\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount) (../../contracts/licence.sol#212)\n\tExternal calls sending eth:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n\tEvent emitted after the call(s):\n\t- TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount) (../../contracts/licence.sol#222)\n", "markdown": "Reentrancy in [Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223):\n\tExternal calls:\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)](../../contracts/licence.sol#L205)\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)](../../contracts/licence.sol#L211)\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)](../../contracts/licence.sol#L212)\n\tExternal calls sending eth:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n\tEvent emitted after the call(s):\n\t- [TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)](../../contracts/licence.sol#L222)\n", "id": "0b66bfae7ffcf90f00f0a76079b285289d517503f7c8d1dd100edcc09956113e", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)", "source_mapping": {"start": 9084, "length": 75, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [222], "starting_column": 9, "ending_column": 84}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)", "source_mapping": {"start": 8985, "length": 78, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [219], "starting_column": 13, "ending_column": 91}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Licence.load(address,uint256) (../../contracts/licence.sol#201-223):\n\tExternal calls:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n\tEvent emitted after the call(s):\n\t- TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount) (../../contracts/licence.sol#222)\n\t- TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount) (../../contracts/licence.sol#219)\n", "markdown": "Reentrancy in [Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223):\n\tExternal calls:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n\tEvent emitted after the call(s):\n\t- [TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)](../../contracts/licence.sol#L222)\n\t- [TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)](../../contracts/licence.sol#L219)\n", "id": "bbb126fc2fc1618ff0d13105f131a70023ab7963d1556c263706b87552939c1c", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "Licence.slitherConstructorVariables() (../../contracts/licence.sol#31-254) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[Licence.slitherConstructorVariables()](../../contracts/licence.sol#L31-L254) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "ddd5fb5c3b142504e4277598a2547e1741a8d933f34e84e86b548befebf2252b", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "refundGas", "source_mapping": {"start": 1687, "length": 274, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasRefundable", "source_mapping": {"start": 901, "length": 2256, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "refundGas()"}}, {"type": "node", "name": "_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)", "source_mapping": {"start": 1847, "length": 107, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [44], "starting_column": 9, "ending_column": 116}, "type_specific_fields": {"parent": {"type": "function", "name": "refundGas", "source_mapping": {"start": 1687, "length": 274, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasRefundable", "source_mapping": {"start": 901, "length": 2256, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "refundGas()"}}}}], "description": "GasRefundable.refundGas() (../../contracts/internals/gasRefundable.sol#40-45) ignores return value by _gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit) (../../contracts/internals/gasRefundable.sol#44)\n", "markdown": "[GasRefundable.refundGas()](../../contracts/internals/gasRefundable.sol#L40-L45) ignores return value by [_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)](../../contracts/internals/gasRefundable.sol#L44)\n", "id": "b75743d2bf9fc11b85a8d9fdebf99c34d10435409f23409fa2d0973b85c8c081", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "owner", "source_mapping": {"start": 641, "length": 13, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [20], "starting_column": 59, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "setSubnodeOwner", "source_mapping": {"start": 587, "length": 78, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [20], "starting_column": 5, "ending_column": 83}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setSubnodeOwner(bytes32,bytes32,address)"}}}}, {"type": "function", "name": "owner", "source_mapping": {"start": 854, "length": 61, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [24], "starting_column": 5, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "owner(bytes32)"}}], "description": "IENS.setSubnodeOwner(bytes32,bytes32,address).owner (../../contracts/interfaces/IENS.sol#20) shadows:\n\t- IENS.owner(bytes32) (../../contracts/interfaces/IENS.sol#24) (function)\n", "markdown": "[IENS.setSubnodeOwner(bytes32,bytes32,address).owner](../../contracts/interfaces/IENS.sol#L20) shadows:\n\t- [IENS.owner(bytes32)](../../contracts/interfaces/IENS.sol#L24) (function)\n", "id": "b8efeadf77d41b1a7d348368cca9449309ebb832456da6bf37c0342bf862a499", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "resolver", "source_mapping": {"start": 705, "length": 16, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [21], "starting_column": 40, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "setResolver", "source_mapping": {"start": 670, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [21], "starting_column": 5, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setResolver(bytes32,address)"}}}}, {"type": "function", "name": "resolver", "source_mapping": {"start": 920, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [25], "starting_column": 5, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "resolver(bytes32)"}}], "description": "IENS.setResolver(bytes32,address).resolver (../../contracts/interfaces/IENS.sol#21) shadows:\n\t- IENS.resolver(bytes32) (../../contracts/interfaces/IENS.sol#25) (function)\n", "markdown": "[IENS.setResolver(bytes32,address).resolver](../../contracts/interfaces/IENS.sol#L21) shadows:\n\t- [IENS.resolver(bytes32)](../../contracts/interfaces/IENS.sol#L25) (function)\n", "id": "130d460d673393efe8a8da0e46e6b069c8552de929f23a9872afa5af3064cfd3", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "owner", "source_mapping": {"start": 769, "length": 13, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [22], "starting_column": 37, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "setOwner", "source_mapping": {"start": 737, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [22], "starting_column": 5, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setOwner(bytes32,address)"}}}}, {"type": "function", "name": "owner", "source_mapping": {"start": 854, "length": 61, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [24], "starting_column": 5, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "owner(bytes32)"}}], "description": "IENS.setOwner(bytes32,address).owner (../../contracts/interfaces/IENS.sol#22) shadows:\n\t- IENS.owner(bytes32) (../../contracts/interfaces/IENS.sol#24) (function)\n", "markdown": "[IENS.setOwner(bytes32,address).owner](../../contracts/interfaces/IENS.sol#L22) shadows:\n\t- [IENS.owner(bytes32)](../../contracts/interfaces/IENS.sol#L24) (function)\n", "id": "68a9c62e14cf270cc78b15e4f6eff049bf028789e5364f716487844103314b09", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "ttl", "source_mapping": {"start": 828, "length": 10, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [23], "starting_column": 35, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "function", "name": "setTTL", "source_mapping": {"start": 798, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [23], "starting_column": 5, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setTTL(bytes32,uint64)"}}}}, {"type": "function", "name": "ttl", "source_mapping": {"start": 989, "length": 58, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [26], "starting_column": 5, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "ttl(bytes32)"}}], "description": "IENS.setTTL(bytes32,uint64).ttl (../../contracts/interfaces/IENS.sol#23) shadows:\n\t- IENS.ttl(bytes32) (../../contracts/interfaces/IENS.sol#26) (function)\n", "markdown": "[IENS.setTTL(bytes32,uint64).ttl](../../contracts/interfaces/IENS.sol#L23) shadows:\n\t- [IENS.ttl(bytes32)](../../contracts/interfaces/IENS.sol#L26) (function)\n", "id": "a69f8ad16df8947c6709bf091d37a3ec734d1ab5151c7135b5df2cc84378909c", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 2282, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [50], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "refundGas()", "source_mapping": {"start": 2239, "length": 9, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [49], "starting_column": 39, "ending_column": 48}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)", "source_mapping": {"start": 1847, "length": 107, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [44], "starting_column": 9, "ending_column": 116}, "type_specific_fields": {"parent": {"type": "function", "name": "refundGas", "source_mapping": {"start": 1687, "length": 274, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasRefundable", "source_mapping": {"start": 901, "length": 2256, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "refundGas()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 2282, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [50], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 2423, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [52], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in GasProxy.executeTransaction(address,uint256,bytes) (../../contracts/gasProxy.sol#45-54):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/gasProxy.sol#50)\n\t- refundGas() (../../contracts/gasProxy.sol#49)\n\t\t- _gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit) (../../contracts/internals/gasRefundable.sol#44)\n\tExternal calls sending eth:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/gasProxy.sol#50)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/gasProxy.sol#52)\n", "markdown": "Reentrancy in [GasProxy.executeTransaction(address,uint256,bytes)](../../contracts/gasProxy.sol#L45-L54):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/gasProxy.sol#L50)\n\t- [refundGas()](../../contracts/gasProxy.sol#L49)\n\t\t- [_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)](../../contracts/internals/gasRefundable.sol#L44)\n\tExternal calls sending eth:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/gasProxy.sol#L50)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/gasProxy.sol#L52)\n", "id": "068c35828662fe2aa881b25e2c4d696b8f9ef37468232254c1c64db5f71f0109", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "GasProxy.slitherConstructorVariables() (../../contracts/gasProxy.sol#24-55) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[GasProxy.slitherConstructorVariables()](../../contracts/gasProxy.sol#L24-L55) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "8d59c600de2d2cc19c4bf271ece114c7e452982cd3d73eaec8ac52f4452c3633", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c)", "source_mapping": {"start": 1267, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [35], "starting_column": 5, "ending_column": 88}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "GasProxy.slitherConstructorVariables() (../../contracts/gasProxy.sol#24-55) uses literals with too many digits:\n\t- _gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c) (../../contracts/internals/gasRefundable.sol#35)\n", "markdown": "[GasProxy.slitherConstructorVariables()](../../contracts/gasProxy.sol#L24-L55) uses literals with too many digits:\n\t- [_gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c)](../../contracts/internals/gasRefundable.sol#L35)\n", "id": "cc9926bb61499e4a85aaa6ca9e14c72e52ace88023d447419175ef3ba1f518d5", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "controllerNode", "source_mapping": {"start": 1813, "length": 95, "filename_used": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_relative": "../../contracts/internals/controllable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_short": "../../contracts/internals/controllable.sol", "is_dependency": false, "lines": [49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Controllable", "source_mapping": {"start": 1030, "length": 1770, "filename_used": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_relative": "../../contracts/internals/controllable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_short": "../../contracts/internals/controllable.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72], "starting_column": 1, "ending_column": 2}}, "signature": "controllerNode()"}}], "description": "controllerNode() should be declared external:\n\t- Controllable.controllerNode() (../../contracts/internals/controllable.sol#49-51)\n", "markdown": "controllerNode() should be declared external:\n\t- [Controllable.controllerNode()](../../contracts/internals/controllable.sol#L49-L51)\n", "id": "d13a5d67fbaa6821edc17da5f446b38ce126b2b8abcbc3c21b79428186db1d29", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "ensRegistry", "source_mapping": {"start": 1600, "length": 89, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [40, 41, 42], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ENSResolvable", "source_mapping": {"start": 1079, "length": 1226, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], "starting_column": 1, "ending_column": 2}}, "signature": "ensRegistry()"}}], "description": "ensRegistry() should be declared external:\n\t- ENSResolvable.ensRegistry() (../../contracts/internals/ensResolvable.sol#40-42)\n", "markdown": "ensRegistry() should be declared external:\n\t- [ENSResolvable.ensRegistry()](../../contracts/internals/ensResolvable.sol#L40-L42)\n", "id": "1afd905300be9ef64532aa1b05a1cfa9a93096242283226925905e9b9034d0cc", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "owner", "source_mapping": {"start": 3543, "length": 85, "filename_used": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_relative": "../../contracts/internals/ownable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_short": "../../contracts/internals/ownable.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Ownable", "source_mapping": {"start": 1225, "length": 3110, "filename_used": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_relative": "../../contracts/internals/ownable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_short": "../../contracts/internals/ownable.sol", "is_dependency": false, "lines": [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "owner()"}}], "description": "owner() should be declared external:\n\t- Ownable.owner() (../../contracts/internals/ownable.sol#82-84)\n", "markdown": "owner() should be declared external:\n\t- [Ownable.owner()](../../contracts/internals/ownable.sol#L82-L84)\n", "id": "698811821ed34357d834c197b976565a1354eaff150bcbc8a352f2d8c7df57f3", "check": "external-function", "impact": "Optimization", "confidence": "High"}] \ No newline at end of file +[{"elements": [{"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 19085, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}, {"type": "node", "name": "amountToSend = _amount.mul(rate).div(magnitude)", "source_mapping": {"start": 20016, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [438], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 19085, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}, {"type": "node", "name": "amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)", "source_mapping": {"start": 20594, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [447], "starting_column": 9, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 19085, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}], "description": "DailyLimit.convertToStablecoin(address,uint256) (../../contracts/wallet.sol#418-448) performs a multiplication on the result of a division:\n\t-amountToSend = _amount.mul(rate).div(magnitude) (../../contracts/wallet.sol#438)\n\t-amountToSend.mul(stablecoinMagnitude).div(stablecoinRate) (../../contracts/wallet.sol#447)\n", "markdown": "[DailyLimit.convertToStablecoin(address,uint256)](../../contracts/wallet.sol#L418-L448) performs a multiplication on the result of a division:\n\t-[amountToSend = _amount.mul(rate).div(magnitude)](../../contracts/wallet.sol#L438)\n\t-[amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)](../../contracts/wallet.sol#L447)\n", "id": "f40faf2700f534059defe259e8627a48dd6e0f0d288bafb6f89a662f8ea787e7", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31801, "length": 2052, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(_destination)._callOptionalReturn(_data)", "source_mapping": {"start": 33225, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [707], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31801, "length": 2052, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,b)", "source_mapping": {"start": 33447, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [713], "starting_column": 13, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31801, "length": 2052, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#681-723):\n\tExternal calls:\n\t- IERC20(_destination)._callOptionalReturn(_data) (../../contracts/wallet.sol#707)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,b) (../../contracts/wallet.sol#713)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L681-L723):\n\tExternal calls:\n\t- [IERC20(_destination)._callOptionalReturn(_data)](../../contracts/wallet.sol#L707)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,b)](../../contracts/wallet.sol#L713)\n", "id": "8453d0706ad989ef07d26cdc993033917481e491ec89832eba2ada8aeb0dd3d1", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31801, "length": 2052, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 33546, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [717], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31801, "length": 2052, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 33684, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [720], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31801, "length": 2052, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#681-723):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/wallet.sol#717)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/wallet.sol#720)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L681-L723):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/wallet.sol#L717)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/wallet.sol#L720)\n", "id": "d8ca9a157cec65bf3352b7e8109dd1cb629cc1191ede329af03ad52432d5fac2", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 27430, "length": 814, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeApprove(licenceAddress,_amount)", "source_mapping": {"start": 27975, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [609], "starting_column": 13, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 27430, "length": 814, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load(_asset,_amount)", "source_mapping": {"start": 28040, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [610], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 27430, "length": 814, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 28117, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [612], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 27430, "length": 814, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 28117, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [612], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 27430, "length": 814, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "LoadedTokenCard(_asset,_amount)", "source_mapping": {"start": 28200, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [615], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 27430, "length": 814, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.loadTokenCard(address,uint256) (../../contracts/wallet.sol#601-616):\n\tExternal calls:\n\t- IERC20(_asset).safeApprove(licenceAddress,_amount) (../../contracts/wallet.sol#609)\n\t- ILicence(licenceAddress).load(_asset,_amount) (../../contracts/wallet.sol#610)\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#612)\n\tExternal calls sending eth:\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#612)\n\tEvent emitted after the call(s):\n\t- LoadedTokenCard(_asset,_amount) (../../contracts/wallet.sol#615)\n", "markdown": "Reentrancy in [Wallet.loadTokenCard(address,uint256)](../../contracts/wallet.sol#L601-L616):\n\tExternal calls:\n\t- [IERC20(_asset).safeApprove(licenceAddress,_amount)](../../contracts/wallet.sol#L609)\n\t- [ILicence(licenceAddress).load(_asset,_amount)](../../contracts/wallet.sol#L610)\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L612)\n\tExternal calls sending eth:\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L612)\n\tEvent emitted after the call(s):\n\t- [LoadedTokenCard(_asset,_amount)](../../contracts/wallet.sol#L615)\n", "id": "54a8145e68e5147ebc3f87a97ea37211e0e83ca2c91fd2c90f4a9993471b83dd", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 16392, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [357, 358, 359, 360, 361, 362, 363], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 16469, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [358], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 16392, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [357, 358, 359, 360, 361, 362, 363], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}}}], "description": "DailyLimit.dailyLimitAvailable() (../../contracts/wallet.sol#357-363) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#358)\n", "markdown": "[DailyLimit.dailyLimitAvailable()](../../contracts/wallet.sol#L357-L363) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L358)\n", "id": "660fda8b7d535d122bf2223e01c008fc561366cd91a3f68221fc1f25594fd13f", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 18413, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [404, 405, 406, 407, 408, 409, 410, 411, 412], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 18473, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [405], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 18413, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [404, 405, 406, 407, 408, 409, 410, 411, 412], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13359, "length": 7308, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}}}], "description": "DailyLimit._updateAvailableDailyLimit() (../../contracts/wallet.sol#404-412) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#405)\n", "markdown": "[DailyLimit._updateAvailableDailyLimit()](../../contracts/wallet.sol#L404-L412) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L405)\n", "id": "517d45376082070aa1bb674bb080e7031fd63aaa2b4afb1e981afdb45615a8ce", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 28635, "length": 562, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [625, 626, 627, 628, 629, 630, 631, 632, 633, 634], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 29071, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [631], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 28635, "length": 562, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [625, 626, 627, 628, 629, 630, 631, 632, 633, 634], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 29144, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [633], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 28635, "length": 562, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [625, 626, 627, 628, 629, 630, 631, 632, 633, 634], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 20767, "length": 14756, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#625-634):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#631)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#633)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L625-L634):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L631)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L633)\n", "id": "a15a08257262bf8c9f08f0ee0567a79da2f2c0fc313ec788a520c10ea0ddc7db", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 29650, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}, {"type": "node", "name": "amountToSend = _amount.mul(rate).div(magnitude)", "source_mapping": {"start": 30581, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [661], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 29650, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}, {"type": "node", "name": "amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)", "source_mapping": {"start": 31159, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [670], "starting_column": 9, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 29650, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}], "description": "Wallet.convertToStablecoin(address,uint256) (../../contracts/wallet.sol#641-671) performs a multiplication on the result of a division:\n\t-amountToSend = _amount.mul(rate).div(magnitude) (../../contracts/wallet.sol#661)\n\t-amountToSend.mul(stablecoinMagnitude).div(stablecoinRate) (../../contracts/wallet.sol#670)\n", "markdown": "[Wallet.convertToStablecoin(address,uint256)](../../contracts/wallet.sol#L641-L671) performs a multiplication on the result of a division:\n\t-[amountToSend = _amount.mul(rate).div(magnitude)](../../contracts/wallet.sol#L661)\n\t-[amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)](../../contracts/wallet.sol#L670)\n", "id": "dc79bda57b1d0cdcd5c8657131a5eccab005c95e3f1fc86cc7e2340f38f68a34", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31490, "length": 2219, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(_destination)._callOptionalReturn(_data)", "source_mapping": {"start": 33081, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [704], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31490, "length": 2219, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,b)", "source_mapping": {"start": 33303, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [710], "starting_column": 13, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31490, "length": 2219, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#677-720):\n\tExternal calls:\n\t- IERC20(_destination)._callOptionalReturn(_data) (../../contracts/wallet.sol#704)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,b) (../../contracts/wallet.sol#710)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L677-L720):\n\tExternal calls:\n\t- [IERC20(_destination)._callOptionalReturn(_data)](../../contracts/wallet.sol#L704)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,b)](../../contracts/wallet.sol#L710)\n", "id": "50754dd812db3ca6dd35b6d500ed4db24b1d78fd7b6b80325c1bcd758f3993db", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31490, "length": 2219, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 33402, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [714], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31490, "length": 2219, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 33540, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [717], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 31490, "length": 2219, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#677-720):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/wallet.sol#714)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/wallet.sol#717)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L677-L720):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/wallet.sol#L714)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/wallet.sol#L717)\n", "id": "f2f83e08b57057f2dc084cf764f3b5f9460c98000e5e15ce276e33a38e65be20", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 25125, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeApprove(licenceAddress,_amount)", "source_mapping": {"start": 25795, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [569], "starting_column": 13, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 25125, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load(_asset,_amount)", "source_mapping": {"start": 25860, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [570], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 25125, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 25937, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [572], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 25125, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 25937, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [572], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 25125, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "LoadedTokenCard(_asset,_amount)", "source_mapping": {"start": 26020, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [575], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 25125, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.loadTokenCard(address,uint256) (../../contracts/wallet.sol#559-576):\n\tExternal calls:\n\t- IERC20(_asset).safeApprove(licenceAddress,_amount) (../../contracts/wallet.sol#569)\n\t- ILicence(licenceAddress).load(_asset,_amount) (../../contracts/wallet.sol#570)\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#572)\n\tExternal calls sending eth:\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#572)\n\tEvent emitted after the call(s):\n\t- LoadedTokenCard(_asset,_amount) (../../contracts/wallet.sol#575)\n", "markdown": "Reentrancy in [Wallet.loadTokenCard(address,uint256)](../../contracts/wallet.sol#L559-L576):\n\tExternal calls:\n\t- [IERC20(_asset).safeApprove(licenceAddress,_amount)](../../contracts/wallet.sol#L569)\n\t- [ILicence(licenceAddress).load(_asset,_amount)](../../contracts/wallet.sol#L570)\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L572)\n\tExternal calls sending eth:\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L572)\n\tEvent emitted after the call(s):\n\t- [LoadedTokenCard(_asset,_amount)](../../contracts/wallet.sol#L575)\n", "id": "486bed9158bc158014fe19c800bbfd03e74f74d53f7019aa3ced16edba18de67", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 16124, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [354, 355, 356, 357, 358, 359, 360], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13356, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 16201, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [355], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 16124, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [354, 355, 356, 357, 358, 359, 360], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13356, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}}}], "description": "DailyLimit.dailyLimitAvailable() (../../contracts/wallet.sol#354-360) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#355)\n", "markdown": "[DailyLimit.dailyLimitAvailable()](../../contracts/wallet.sol#L354-L360) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L355)\n", "id": "0696c9feb27ea80b0d2a54688f7c55dd81ee7981ff949bf1ec1b68506a847843", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 17987, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [398, 399, 400, 401, 402, 403, 404, 405, 406], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13356, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 18047, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [399], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 17987, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [398, 399, 400, 401, 402, 403, 404, 405, 406], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13356, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}}}], "description": "DailyLimit._updateAvailableDailyLimit() (../../contracts/wallet.sol#398-406) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#399)\n", "markdown": "[DailyLimit._updateAvailableDailyLimit()](../../contracts/wallet.sol#L398-L406) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L399)\n", "id": "e99dd80222e1b947ff487d4815ef0e6deab603ea426134bf1862259885e75008", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 26455, "length": 550, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [585, 586, 587, 588, 589, 590, 591, 592, 593, 594], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 26879, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [591], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 26455, "length": 550, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [585, 586, 587, 588, 589, 590, 591, 592, 593, 594], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 26952, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [593], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 26455, "length": 550, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [585, 586, 587, 588, 589, 590, 591, 592, 593, 594], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18462, "length": 17117, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#585-594):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#591)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#593)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L585-L594):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L591)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L593)\n", "id": "895af948f3aac2b9d21696aa7a843268174a39e8a414844bbb7023ecc38aab17", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 28770, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}, {"type": "node", "name": "amountToSend = _amount.mul(rate).div(magnitude)", "source_mapping": {"start": 29701, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [637], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 28770, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}, {"type": "node", "name": "amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)", "source_mapping": {"start": 30279, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [646], "starting_column": 9, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 28770, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}], "description": "Wallet.convertToStablecoin(address,uint256) (../../contracts/wallet.sol#617-647) performs a multiplication on the result of a division:\n\t-amountToSend = _amount.mul(rate).div(magnitude) (../../contracts/wallet.sol#637)\n\t-amountToSend.mul(stablecoinMagnitude).div(stablecoinRate) (../../contracts/wallet.sol#646)\n", "markdown": "[Wallet.convertToStablecoin(address,uint256)](../../contracts/wallet.sol#L617-L647) performs a multiplication on the result of a division:\n\t-[amountToSend = _amount.mul(rate).div(magnitude)](../../contracts/wallet.sol#L637)\n\t-[amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)](../../contracts/wallet.sol#L646)\n", "id": "d2c5cb2e5931b94801f80e0acda602945a4805c0108658fe67563a7fe48aded6", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 21354, "length": 1134, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}, {"type": "node", "name": "(success,returnData) = address(this).call(_data)", "source_mapping": {"start": 22307, "length": 67, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [491], "starting_column": 9, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 21354, "length": 1134, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedRelayedTransaction(_data,returnData)", "source_mapping": {"start": 22431, "length": 50, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [494], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 21354, "length": 1134, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeRelayedTransaction(uint256,bytes,bytes) (../../contracts/wallet.sol#472-495):\n\tExternal calls:\n\t- (success,returnData) = address(this).call(_data) (../../contracts/wallet.sol#491)\n\tEvent emitted after the call(s):\n\t- ExecutedRelayedTransaction(_data,returnData) (../../contracts/wallet.sol#494)\n", "markdown": "Reentrancy in [Wallet.executeRelayedTransaction(uint256,bytes,bytes)](../../contracts/wallet.sol#L472-L495):\n\tExternal calls:\n\t- [(success,returnData) = address(this).call(_data)](../../contracts/wallet.sol#L491)\n\tEvent emitted after the call(s):\n\t- [ExecutedRelayedTransaction(_data,returnData)](../../contracts/wallet.sol#L494)\n", "id": "a8d590b479be6c7a5486a15f28b79f1ed4179ef88e16654bee70e3c4840270ac", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 30610, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(_destination)._callOptionalReturn(_data)", "source_mapping": {"start": 32172, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [680], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 30610, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,b)", "source_mapping": {"start": 32394, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [686], "starting_column": 13, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 30610, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#653-696):\n\tExternal calls:\n\t- IERC20(_destination)._callOptionalReturn(_data) (../../contracts/wallet.sol#680)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,b) (../../contracts/wallet.sol#686)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L653-L696):\n\tExternal calls:\n\t- [IERC20(_destination)._callOptionalReturn(_data)](../../contracts/wallet.sol#L680)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,b)](../../contracts/wallet.sol#L686)\n", "id": "986bd40ae5ee76690167450a3abc2d74f1b560e57f7e039af9cad3096385c0c0", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 30610, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 32493, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [690], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 30610, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 32631, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [693], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 30610, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#653-696):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/wallet.sol#690)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/wallet.sol#693)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L653-L696):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/wallet.sol#L690)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/wallet.sol#L693)\n", "id": "8f6b4e2d1a128b9a63a81a91967f7d3da642da1f7a2815bccf113f8d39a02a9b", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 24244, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeApprove(licenceAddress,_amount)", "source_mapping": {"start": 24914, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [545], "starting_column": 13, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 24244, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load(_asset,_amount)", "source_mapping": {"start": 24979, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [546], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 24244, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 25056, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [548], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 24244, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 25056, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [548], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 24244, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "LoadedTokenCard(_asset,_amount)", "source_mapping": {"start": 25139, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [551], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 24244, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.loadTokenCard(address,uint256) (../../contracts/wallet.sol#535-552):\n\tExternal calls:\n\t- IERC20(_asset).safeApprove(licenceAddress,_amount) (../../contracts/wallet.sol#545)\n\t- ILicence(licenceAddress).load(_asset,_amount) (../../contracts/wallet.sol#546)\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#548)\n\tExternal calls sending eth:\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#548)\n\tEvent emitted after the call(s):\n\t- LoadedTokenCard(_asset,_amount) (../../contracts/wallet.sol#551)\n", "markdown": "Reentrancy in [Wallet.loadTokenCard(address,uint256)](../../contracts/wallet.sol#L535-L552):\n\tExternal calls:\n\t- [IERC20(_asset).safeApprove(licenceAddress,_amount)](../../contracts/wallet.sol#L545)\n\t- [ILicence(licenceAddress).load(_asset,_amount)](../../contracts/wallet.sol#L546)\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L548)\n\tExternal calls sending eth:\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L548)\n\tEvent emitted after the call(s):\n\t- [LoadedTokenCard(_asset,_amount)](../../contracts/wallet.sol#L551)\n", "id": "5d28da95b1f9bdee832322c8cd183afab1c956d24a6b3f2e67483c85a87fe6a5", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 15846, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [350, 351, 352, 353, 354, 355, 356], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13078, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 15923, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [351], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 15846, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [350, 351, 352, 353, 354, 355, 356], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13078, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}}}], "description": "DailyLimit.dailyLimitAvailable() (../../contracts/wallet.sol#350-356) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#351)\n", "markdown": "[DailyLimit.dailyLimitAvailable()](../../contracts/wallet.sol#L350-L356) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L351)\n", "id": "b4af7a01c46ddfad3f8ece6253cd966f942fd4d9ad2c113e52c50bdbdbbb6f3a", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 17709, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [394, 395, 396, 397, 398, 399, 400, 401, 402], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13078, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 17769, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [395], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 17709, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [394, 395, 396, 397, 398, 399, 400, 401, 402], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 13078, "length": 5006, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}}}], "description": "DailyLimit._updateAvailableDailyLimit() (../../contracts/wallet.sol#394-402) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#395)\n", "markdown": "[DailyLimit._updateAvailableDailyLimit()](../../contracts/wallet.sol#L394-L402) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L395)\n", "id": "7771a43c1a0d9f6b6d925730066b4c66691ecd08134f1be5f9f612a08bef77bc", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 25574, "length": 550, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [561, 562, 563, 564, 565, 566, 567, 568, 569, 570], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 25998, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [567], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 25574, "length": 550, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [561, 562, 563, 564, 565, 566, 567, 568, 569, 570], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 26071, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [569], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 25574, "length": 550, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [561, 562, 563, 564, 565, 566, 567, 568, 569, 570], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 18184, "length": 16471, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#561-570):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#567)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#569)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L561-L570):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L567)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L569)\n", "id": "5194d4fef8f9d6c33183161cb43e75b034bdafb4203afb207216d0b2cb034a17", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2899, "length": 1185, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3088, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,uint256,address[])"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 3357, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [82], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2899, "length": 1185, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3088, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,uint256,address[])"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "deployedWallets[_owner] = wallet", "source_mapping": {"start": 3520, "length": 32, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [85], "starting_column": 9, "ending_column": 41}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2899, "length": 1185, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3088, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,uint256,address[])"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "deployedWallets"}}], "description": "Reentrancy in WalletDeployer.migrateWallet(address,address,bool,bool,uint256,address[]) (../../contracts/walletDeployer.sol#71-101):\n\tExternal calls:\n\t- wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop() (../../contracts/walletDeployer.sol#82)\n\tState variables written after the call(s):\n\t- deployedWallets[_owner] = wallet (../../contracts/walletDeployer.sol#85)\n", "markdown": "Reentrancy in [WalletDeployer.migrateWallet(address,address,bool,bool,uint256,address[])](../../contracts/walletDeployer.sol#L71-L101):\n\tExternal calls:\n\t- [wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()](../../contracts/walletDeployer.sol#L82)\n\tState variables written after the call(s):\n\t- [deployedWallets[_owner] = wallet](../../contracts/walletDeployer.sol#L85)\n", "id": "8f154ecfc5824e3b987314d0a2f5e529d003edef50be40d366b15f160d857e1c", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2899, "length": 1185, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3088, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,uint256,address[])"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 3357, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [82], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2899, "length": 1185, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3088, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,uint256,address[])"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "MigratedWallet(wallet,_oldWallet,_owner,msg.value)", "source_mapping": {"start": 3451, "length": 58, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [83], "starting_column": 9, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2899, "length": 1185, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3088, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,uint256,address[])"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in WalletDeployer.migrateWallet(address,address,bool,bool,uint256,address[]) (../../contracts/walletDeployer.sol#71-101):\n\tExternal calls:\n\t- wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop() (../../contracts/walletDeployer.sol#82)\n\tEvent emitted after the call(s):\n\t- MigratedWallet(wallet,_oldWallet,_owner,msg.value) (../../contracts/walletDeployer.sol#83)\n", "markdown": "Reentrancy in [WalletDeployer.migrateWallet(address,address,bool,bool,uint256,address[])](../../contracts/walletDeployer.sol#L71-L101):\n\tExternal calls:\n\t- [wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()](../../contracts/walletDeployer.sol#L82)\n\tEvent emitted after the call(s):\n\t- [MigratedWallet(wallet,_oldWallet,_owner,msg.value)](../../contracts/walletDeployer.sol#L83)\n", "id": "b29cdb51c11b209fa6cbae7acc6eaa1139948abf695c7c82dd1dc272cd236cd2", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "walletCachePop", "source_mapping": {"start": 3907, "length": 292, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "walletCachePop()"}}, {"type": "node", "name": "cacheWallet()", "source_mapping": {"start": 4041, "length": 13, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [98], "starting_column": 13, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "walletCachePop", "source_mapping": {"start": 3907, "length": 292, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "walletCachePop()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4388, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)", "source_mapping": {"start": 4481, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "cachedWallets.pop()", "source_mapping": {"start": 4149, "length": 19, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [102], "starting_column": 9, "ending_column": 28}, "type_specific_fields": {"parent": {"type": "function", "name": "walletCachePop", "source_mapping": {"start": 3907, "length": 292, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "walletCachePop()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "cachedWallets"}}], "description": "Reentrancy in WalletCache.walletCachePop() (../../contracts/walletCache.sol#96-105):\n\tExternal calls:\n\t- cacheWallet() (../../contracts/walletCache.sol#98)\n\t\t- wallet = address(new UpgradeabilityProxy(walletImplementation,)) (../../contracts/walletCache.sol#110)\n\t\t- IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit) (../../contracts/walletCache.sol#111-119)\n\tState variables written after the call(s):\n\t- cachedWallets.pop() (../../contracts/walletCache.sol#102)\n", "markdown": "Reentrancy in [WalletCache.walletCachePop()](../../contracts/walletCache.sol#L96-L105):\n\tExternal calls:\n\t- [cacheWallet()](../../contracts/walletCache.sol#L98)\n\t\t- [wallet = address(new UpgradeabilityProxy(walletImplementation,))](../../contracts/walletCache.sol#L110)\n\t\t- [IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)](../../contracts/walletCache.sol#L111-L119)\n\tState variables written after the call(s):\n\t- [cachedWallets.pop()](../../contracts/walletCache.sol#L102)\n", "id": "23ece0d6e57608c6c57add03c9e58044d357633c8cdab578e48ffcc72f8dd86a", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4388, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)", "source_mapping": {"start": 4481, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4388, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)", "source_mapping": {"start": 4481, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "cachedWallets.push(wallet)", "source_mapping": {"start": 4843, "length": 26, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [120], "starting_column": 9, "ending_column": 35}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "cachedWallets"}}], "description": "Reentrancy in WalletCache.cacheWallet() (../../contracts/walletCache.sol#108-123):\n\tExternal calls:\n\t- wallet = address(new UpgradeabilityProxy(walletImplementation,)) (../../contracts/walletCache.sol#110)\n\t- IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit) (../../contracts/walletCache.sol#111-119)\n\tState variables written after the call(s):\n\t- cachedWallets.push(wallet) (../../contracts/walletCache.sol#120)\n", "markdown": "Reentrancy in [WalletCache.cacheWallet()](../../contracts/walletCache.sol#L108-L123):\n\tExternal calls:\n\t- [wallet = address(new UpgradeabilityProxy(walletImplementation,))](../../contracts/walletCache.sol#L110)\n\t- [IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)](../../contracts/walletCache.sol#L111-L119)\n\tState variables written after the call(s):\n\t- [cachedWallets.push(wallet)](../../contracts/walletCache.sol#L120)\n", "id": "37e5ae3fd03f04bd9c52830c372f415d3a32cab48338b06a9d00c56d48f3804b", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4388, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)", "source_mapping": {"start": 4481, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "CachedWallet(wallet)", "source_mapping": {"start": 4880, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [122], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4275, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3649, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in WalletCache.cacheWallet() (../../contracts/walletCache.sol#108-123):\n\tExternal calls:\n\t- wallet = address(new UpgradeabilityProxy(walletImplementation,)) (../../contracts/walletCache.sol#110)\n\t- IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit) (../../contracts/walletCache.sol#111-119)\n\tEvent emitted after the call(s):\n\t- CachedWallet(wallet) (../../contracts/walletCache.sol#122)\n", "markdown": "Reentrancy in [WalletCache.cacheWallet()](../../contracts/walletCache.sol#L108-L123):\n\tExternal calls:\n\t- [wallet = address(new UpgradeabilityProxy(walletImplementation,))](../../contracts/walletCache.sol#L110)\n\t- [IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultDailyLimit)](../../contracts/walletCache.sol#L111-L119)\n\tEvent emitted after the call(s):\n\t- [CachedWallet(wallet)](../../contracts/walletCache.sol#L122)\n", "id": "791c5f8285dd95ff5dce366ad41ab8ab3c4a8d5d8f5298264ad1051199435b2c", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 27051, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}, {"type": "node", "name": "amountToSend = _amount.mul(rate).div(magnitude)", "source_mapping": {"start": 27982, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [583], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 27051, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}, {"type": "node", "name": "amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)", "source_mapping": {"start": 28560, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [592], "starting_column": 9, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 27051, "length": 1580, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}], "description": "Wallet.convertToStablecoin(address,uint256) (../../contracts/wallet.sol#563-593) performs a multiplication on the result of a division:\n\t-amountToSend = _amount.mul(rate).div(magnitude) (../../contracts/wallet.sol#583)\n\t-amountToSend.mul(stablecoinMagnitude).div(stablecoinRate) (../../contracts/wallet.sol#592)\n", "markdown": "[Wallet.convertToStablecoin(address,uint256)](../../contracts/wallet.sol#L563-L593) performs a multiplication on the result of a division:\n\t-[amountToSend = _amount.mul(rate).div(magnitude)](../../contracts/wallet.sol#L583)\n\t-[amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)](../../contracts/wallet.sol#L592)\n", "id": "1e0b234747807fbb5245169570b2b7fb9f07f78ac1afa8e1be592afb1191efcd", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 19621, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}, {"type": "node", "name": "(success,returnData) = address(this).call(_data)", "source_mapping": {"start": 20581, "length": 67, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [437], "starting_column": 9, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 19621, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedRelayedTransaction(_data,returnData)", "source_mapping": {"start": 20705, "length": 50, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [440], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 19621, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeRelayedTransaction(uint256,bytes,bytes) (../../contracts/wallet.sol#418-441):\n\tExternal calls:\n\t- (success,returnData) = address(this).call(_data) (../../contracts/wallet.sol#437)\n\tEvent emitted after the call(s):\n\t- ExecutedRelayedTransaction(_data,returnData) (../../contracts/wallet.sol#440)\n", "markdown": "Reentrancy in [Wallet.executeRelayedTransaction(uint256,bytes,bytes)](../../contracts/wallet.sol#L418-L441):\n\tExternal calls:\n\t- [(success,returnData) = address(this).call(_data)](../../contracts/wallet.sol#L437)\n\tEvent emitted after the call(s):\n\t- [ExecutedRelayedTransaction(_data,returnData)](../../contracts/wallet.sol#L440)\n", "id": "3a35fb3bee7858d2e5e2dfe41b98c442fc8f9866db6fcf679aac1497dd758db8", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 28891, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(_destination)._callOptionalReturn(_data)", "source_mapping": {"start": 30453, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [626], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 28891, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,b)", "source_mapping": {"start": 30675, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [632], "starting_column": 13, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 28891, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#599-642):\n\tExternal calls:\n\t- IERC20(_destination)._callOptionalReturn(_data) (../../contracts/wallet.sol#626)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,b) (../../contracts/wallet.sol#632)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L599-L642):\n\tExternal calls:\n\t- [IERC20(_destination)._callOptionalReturn(_data)](../../contracts/wallet.sol#L626)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,b)](../../contracts/wallet.sol#L632)\n", "id": "c1a1c741ecef7d0ec1b421c1549e41a3c5de2e1da3390cb741cba8a00040234a", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 28891, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 30774, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [636], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 28891, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 30912, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [639], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 28891, "length": 2190, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#599-642):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/wallet.sol#636)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/wallet.sol#639)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L599-L642):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/wallet.sol#L636)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/wallet.sol#L639)\n", "id": "74afa6312b4eb14d15de176af037db957fb7df33a76e2c3d7a6117ac1a1fb22c", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22518, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeApprove(licenceAddress,_amount)", "source_mapping": {"start": 23188, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [491], "starting_column": 13, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22518, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load(_asset,_amount)", "source_mapping": {"start": 23253, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22518, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 23330, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [494], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22518, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 23330, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [494], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22518, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "LoadedTokenCard(_asset,_amount)", "source_mapping": {"start": 23413, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [497], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22518, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.loadTokenCard(address,uint256) (../../contracts/wallet.sol#481-498):\n\tExternal calls:\n\t- IERC20(_asset).safeApprove(licenceAddress,_amount) (../../contracts/wallet.sol#491)\n\t- ILicence(licenceAddress).load(_asset,_amount) (../../contracts/wallet.sol#492)\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#494)\n\tExternal calls sending eth:\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#494)\n\tEvent emitted after the call(s):\n\t- LoadedTokenCard(_asset,_amount) (../../contracts/wallet.sol#497)\n", "markdown": "Reentrancy in [Wallet.loadTokenCard(address,uint256)](../../contracts/wallet.sol#L481-L498):\n\tExternal calls:\n\t- [IERC20(_asset).safeApprove(licenceAddress,_amount)](../../contracts/wallet.sol#L491)\n\t- [ILicence(licenceAddress).load(_asset,_amount)](../../contracts/wallet.sol#L492)\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L494)\n\tExternal calls sending eth:\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L494)\n\tEvent emitted after the call(s):\n\t- [LoadedTokenCard(_asset,_amount)](../../contracts/wallet.sol#L497)\n", "id": "77327b12f5a5c8c7964e978adbdcbe01bc6a937432ecfb766b117fde7232da34", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 14139, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [297, 298, 299, 300, 301, 302, 303], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11366, "length": 5011, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 14216, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [298], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 14139, "length": 197, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [297, 298, 299, 300, 301, 302, 303], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11366, "length": 5011, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}}}], "description": "DailyLimit.dailyLimitAvailable() (../../contracts/wallet.sol#297-303) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#298)\n", "markdown": "[DailyLimit.dailyLimitAvailable()](../../contracts/wallet.sol#L297-L303) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L298)\n", "id": "73f9c07c94114fae31ba92b92e7ca095093697dfe1a61ce7761e9a46eaf02c44", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 16002, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [341, 342, 343, 344, 345, 346, 347, 348, 349], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11366, "length": 5011, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}, {"type": "node", "name": "now > _resetTimestamp", "source_mapping": {"start": 16062, "length": 21, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [342], "starting_column": 13, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 16002, "length": 373, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [341, 342, 343, 344, 345, 346, 347, 348, 349], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11366, "length": 5011, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}}}], "description": "DailyLimit._updateAvailableDailyLimit() (../../contracts/wallet.sol#341-349) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _resetTimestamp (../../contracts/wallet.sol#342)\n", "markdown": "[DailyLimit._updateAvailableDailyLimit()](../../contracts/wallet.sol#L341-L349) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _resetTimestamp](../../contracts/wallet.sol#L342)\n", "id": "1c842f34e2052c53a5f20027dbc7c11424de7477557713fb885cc7a53b3665e8", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 23848, "length": 557, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [507, 508, 509, 510, 511, 512, 513, 514, 515, 516], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 24279, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [513], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 23848, "length": 557, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [507, 508, 509, 510, 511, 512, 513, 514, 515, 516], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 24352, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [515], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 23848, "length": 557, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [507, 508, 509, 510, 511, 512, 513, 514, 515, 516], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16477, "length": 16459, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#507-516):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#513)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#515)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L507-L516):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L513)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L515)\n", "id": "5a28f20b36e8e9aae8526a3b185ba0f8347ba516247b1ee9cbead8908ff836a7", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 27702, "length": 1540, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}, {"type": "node", "name": "amountToSend = _amount.mul(rate).div(magnitude)", "source_mapping": {"start": 28593, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [604], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 27702, "length": 1540, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}, {"type": "node", "name": "amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)", "source_mapping": {"start": 29171, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [613], "starting_column": 9, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 27702, "length": 1540, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}], "description": "Wallet.convertToStablecoin(address,uint256) (../../contracts/wallet.sol#588-614) performs a multiplication on the result of a division:\n\t-amountToSend = _amount.mul(rate).div(magnitude) (../../contracts/wallet.sol#604)\n\t-amountToSend.mul(stablecoinMagnitude).div(stablecoinRate) (../../contracts/wallet.sol#613)\n", "markdown": "[Wallet.convertToStablecoin(address,uint256)](../../contracts/wallet.sol#L588-L614) performs a multiplication on the result of a division:\n\t-[amountToSend = _amount.mul(rate).div(magnitude)](../../contracts/wallet.sol#L604)\n\t-[amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)](../../contracts/wallet.sol#L613)\n", "id": "9bda81c6a396bc6e5af3ccdc7c781eb7305c37a94bf87db3c9ccbfeb5ae5b3eb", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_tokenWhitelistNode", "source_mapping": {"start": 12438, "length": 27, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [265], "starting_column": 52, "ending_column": 79}, "type_specific_fields": {"parent": {"type": "function", "name": "_initializeDailyLimit", "source_mapping": {"start": 12391, "length": 321, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [265, 266, 267, 268, 269, 270, 271, 272], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}, "signature": "_initializeDailyLimit(uint256,bytes32)"}}}}, {"type": "variable", "name": "_tokenWhitelistNode", "source_mapping": {"start": 1348, "length": 67, "filename_used": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_relative": "../../contracts/internals/tokenWhitelistable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_short": "../../contracts/internals/tokenWhitelistable.sol", "is_dependency": false, "lines": [33], "starting_column": 5, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenWhitelistable", "source_mapping": {"start": 1045, "length": 5236, "filename_used": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_relative": "../../contracts/internals/tokenWhitelistable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_short": "../../contracts/internals/tokenWhitelistable.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155], "starting_column": 1, "ending_column": 2}}}}], "description": "DailyLimit._initializeDailyLimit(uint256,bytes32)._tokenWhitelistNode (../../contracts/wallet.sol#265) shadows:\n\t- TokenWhitelistable._tokenWhitelistNode (../../contracts/internals/tokenWhitelistable.sol#33) (state variable)\n", "markdown": "[DailyLimit._initializeDailyLimit(uint256,bytes32)._tokenWhitelistNode](../../contracts/wallet.sol#L265) shadows:\n\t- [TokenWhitelistable._tokenWhitelistNode](../../contracts/internals/tokenWhitelistable.sol#L33) (state variable)\n", "id": "e5bb81054c4147256bf3aaebe7ef7cdeedd5bd5182d32dc08afd644b0f9e0116", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_value", "source_mapping": {"start": 29569, "length": 14, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [622], "starting_column": 9, "ending_column": 23}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}}, {"type": "variable", "name": "_value", "source_mapping": {"start": 11639, "length": 22, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [251], "starting_column": 5, "ending_column": 27}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}}}], "description": "Wallet.executeTransaction(address,uint256,bytes)._value (../../contracts/wallet.sol#622) shadows:\n\t- DailyLimit._value (../../contracts/wallet.sol#251) (state variable)\n", "markdown": "[Wallet.executeTransaction(address,uint256,bytes)._value](../../contracts/wallet.sol#L622) shadows:\n\t- [DailyLimit._value](../../contracts/wallet.sol#L251) (state variable)\n", "id": "90bfcd468a576433295dc979256339d182d72c064d955766641725f26a929749", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "_value", "source_mapping": {"start": 19206, "length": 14, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [419], "starting_column": 24, "ending_column": 38}, "type_specific_fields": {"parent": {"type": "function", "name": "isNotZero", "source_mapping": {"start": 19187, "length": 94, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [419, 420, 421, 422], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "isNotZero(uint256)"}}}}, {"type": "variable", "name": "_value", "source_mapping": {"start": 11639, "length": 22, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [251], "starting_column": 5, "ending_column": 27}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}}}], "description": "Wallet.isNotZero(uint256)._value (../../contracts/wallet.sol#419) shadows:\n\t- DailyLimit._value (../../contracts/wallet.sol#251) (state variable)\n", "markdown": "[Wallet.isNotZero(uint256)._value](../../contracts/wallet.sol#L419) shadows:\n\t- [DailyLimit._value](../../contracts/wallet.sol#L251) (state variable)\n", "id": "1e335a6c51143516ea2aacb63ebfae14b068c26f1fc55aea86d9a1530cbc2bf0", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 19633, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}, {"type": "node", "name": "(success,returnData) = address(this).call(_data)", "source_mapping": {"start": 20593, "length": 67, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [448], "starting_column": 9, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 19633, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedRelayedTransaction(_data,returnData)", "source_mapping": {"start": 20717, "length": 50, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [451], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 19633, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeRelayedTransaction(uint256,bytes,bytes) (../../contracts/wallet.sol#429-452):\n\tExternal calls:\n\t- (success,returnData) = address(this).call(_data) (../../contracts/wallet.sol#448)\n\tEvent emitted after the call(s):\n\t- ExecutedRelayedTransaction(_data,returnData) (../../contracts/wallet.sol#451)\n", "markdown": "Reentrancy in [Wallet.executeRelayedTransaction(uint256,bytes,bytes)](../../contracts/wallet.sol#L429-L452):\n\tExternal calls:\n\t- [(success,returnData) = address(this).call(_data)](../../contracts/wallet.sol#L448)\n\tEvent emitted after the call(s):\n\t- [ExecutedRelayedTransaction(_data,returnData)](../../contracts/wallet.sol#L451)\n", "id": "ec79e84527eef8746fa9ec647fc99366159eb2609e4213975bce953241a24c1b", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(_destination)._callOptionalReturn(_data)", "source_mapping": {"start": 30827, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [644], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,b)", "source_mapping": {"start": 31049, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [650], "starting_column": 13, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#620-660):\n\tExternal calls:\n\t- IERC20(_destination)._callOptionalReturn(_data) (../../contracts/wallet.sol#644)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,b) (../../contracts/wallet.sol#650)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L620-L660):\n\tExternal calls:\n\t- [IERC20(_destination)._callOptionalReturn(_data)](../../contracts/wallet.sol#L644)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,b)](../../contracts/wallet.sol#L650)\n", "id": "ecf8400146003c4b7b7e44c18ee6d86249787a89215657c598f9e3cb3b72319b", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 31148, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [654], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 31286, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [657], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 29502, "length": 1953, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#620-660):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/wallet.sol#654)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/wallet.sol#657)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L620-L660):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/wallet.sol#L654)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/wallet.sol#L657)\n", "id": "b5a1c394bd5406139a742ec93ae05a64d17d4f50fa4e3bd83ce7efa4d1a53cfa", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22530, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeApprove(licenceAddress,_amount)", "source_mapping": {"start": 23200, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [502], "starting_column": 13, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22530, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load(_asset,_amount)", "source_mapping": {"start": 23265, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [503], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22530, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 23342, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [505], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22530, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 23342, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [505], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22530, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "LoadedTokenCard(_asset,_amount)", "source_mapping": {"start": 23425, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 22530, "length": 939, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.loadTokenCard(address,uint256) (../../contracts/wallet.sol#492-509):\n\tExternal calls:\n\t- IERC20(_asset).safeApprove(licenceAddress,_amount) (../../contracts/wallet.sol#502)\n\t- ILicence(licenceAddress).load(_asset,_amount) (../../contracts/wallet.sol#503)\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#505)\n\tExternal calls sending eth:\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#505)\n\tEvent emitted after the call(s):\n\t- LoadedTokenCard(_asset,_amount) (../../contracts/wallet.sol#508)\n", "markdown": "Reentrancy in [Wallet.loadTokenCard(address,uint256)](../../contracts/wallet.sol#L492-L509):\n\tExternal calls:\n\t- [IERC20(_asset).safeApprove(licenceAddress,_amount)](../../contracts/wallet.sol#L502)\n\t- [ILicence(licenceAddress).load(_asset,_amount)](../../contracts/wallet.sol#L503)\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L505)\n\tExternal calls sending eth:\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L505)\n\tEvent emitted after the call(s):\n\t- [LoadedTokenCard(_asset,_amount)](../../contracts/wallet.sol#L508)\n", "id": "3b788cb6a30b3f641772c7e7583a408a1bd7f85564b33648492384ce610931e7", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 13800, "length": 207, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [300, 301, 302, 303, 304, 305, 306], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}, {"type": "node", "name": "now > _updateTimestamp.add(86400)", "source_mapping": {"start": 13877, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [301], "starting_column": 13, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "dailyLimitAvailable", "source_mapping": {"start": 13800, "length": 207, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [300, 301, 302, 303, 304, 305, 306], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}, "signature": "dailyLimitAvailable()"}}}}], "description": "DailyLimit.dailyLimitAvailable() (../../contracts/wallet.sol#300-306) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _updateTimestamp.add(86400) (../../contracts/wallet.sol#301)\n", "markdown": "[DailyLimit.dailyLimitAvailable()](../../contracts/wallet.sol#L300-L306) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _updateTimestamp.add(86400)](../../contracts/wallet.sol#L301)\n", "id": "a93d679b54ec36d932fcff36e21d2a580a2dfd6cdf2a38b039c9235b67baccb9", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 16044, "length": 343, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [352, 353, 354, 355, 356, 357, 358, 359, 360], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}, {"type": "node", "name": "now > _updateTimestamp.add(86400)", "source_mapping": {"start": 16104, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [353], "starting_column": 13, "ending_column": 49}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableDailyLimit", "source_mapping": {"start": 16044, "length": 343, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [352, 353, 354, 355, 356, 357, 358, 359, 360], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimit", "source_mapping": {"start": 11362, "length": 5027, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableDailyLimit()"}}}}], "description": "DailyLimit._updateAvailableDailyLimit() (../../contracts/wallet.sol#352-360) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > _updateTimestamp.add(86400) (../../contracts/wallet.sol#353)\n", "markdown": "[DailyLimit._updateAvailableDailyLimit()](../../contracts/wallet.sol#L352-L360) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > _updateTimestamp.add(86400)](../../contracts/wallet.sol#L353)\n", "id": "e35a8401ff8c2805f39f87764799163bcf46e67e24e9f0dc1ca8af147616ab94", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 23860, "length": 557, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [518, 519, 520, 521, 522, 523, 524, 525, 526, 527], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 24291, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [524], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 23860, "length": 557, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [518, 519, 520, 521, 522, 523, 524, 525, 526, 527], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 24364, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [526], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 23860, "length": 557, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [518, 519, 520, 521, 522, 523, 524, 525, 526, 527], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 16489, "length": 16892, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#518-527):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#524)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#526)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L518-L527):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L524)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L526)\n", "id": "c43efe0610e655bec1cdb32e08e234a043a3b790995b3136e9ab21e91d3bc687", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2976, "length": 1524, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 3570, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [87], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2976, "length": 1524, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "deployedWallets[_owner] = wallet", "source_mapping": {"start": 3733, "length": 32, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [90], "starting_column": 9, "ending_column": 41}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2976, "length": 1524, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "deployedWallets"}}], "description": "Reentrancy in WalletDeployer.migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[]) (../../contracts/walletDeployer.sol#72-112):\n\tExternal calls:\n\t- wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop() (../../contracts/walletDeployer.sol#87)\n\tState variables written after the call(s):\n\t- deployedWallets[_owner] = wallet (../../contracts/walletDeployer.sol#90)\n", "markdown": "Reentrancy in [WalletDeployer.migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])](../../contracts/walletDeployer.sol#L72-L112):\n\tExternal calls:\n\t- [wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()](../../contracts/walletDeployer.sol#L87)\n\tState variables written after the call(s):\n\t- [deployedWallets[_owner] = wallet](../../contracts/walletDeployer.sol#L90)\n", "id": "08c17d72e3fea63da74bc79489b737cb23dc6017f94d4adaf52125d413e35151", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 2239, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [58], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 2239, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [58], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "deployedWallets[_owner] = wallet", "source_mapping": {"start": 2379, "length": 32, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [61], "starting_column": 9, "ending_column": 41}, "type_specific_fields": {"parent": {"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "deployedWallets"}}], "description": "Reentrancy in WalletDeployer.deployWallet(address) (../../contracts/walletDeployer.sol#57-65):\n\tExternal calls:\n\t- wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop() (../../contracts/walletDeployer.sol#58)\n\tState variables written after the call(s):\n\t- deployedWallets[_owner] = wallet (../../contracts/walletDeployer.sol#61)\n", "markdown": "Reentrancy in [WalletDeployer.deployWallet(address)](../../contracts/walletDeployer.sol#L57-L65):\n\tExternal calls:\n\t- [wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()](../../contracts/walletDeployer.sol#L58)\n\tState variables written after the call(s):\n\t- [deployedWallets[_owner] = wallet](../../contracts/walletDeployer.sol#L61)\n", "id": "f0b7aad2205303350c897f944ae44b598d3483a6c19a4266efe45905252cf95e", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 2239, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [58], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "DeployedWallet(wallet,_owner)", "source_mapping": {"start": 2333, "length": 35, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [59], "starting_column": 9, "ending_column": 44}, "type_specific_fields": {"parent": {"type": "function", "name": "deployWallet", "source_mapping": {"start": 2159, "length": 409, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [57, 58, 59, 60, 61, 62, 63, 64, 65], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "deployWallet(address)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in WalletDeployer.deployWallet(address) (../../contracts/walletDeployer.sol#57-65):\n\tExternal calls:\n\t- wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop() (../../contracts/walletDeployer.sol#58)\n\tEvent emitted after the call(s):\n\t- DeployedWallet(wallet,_owner) (../../contracts/walletDeployer.sol#59)\n", "markdown": "Reentrancy in [WalletDeployer.deployWallet(address)](../../contracts/walletDeployer.sol#L57-L65):\n\tExternal calls:\n\t- [wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()](../../contracts/walletDeployer.sol#L58)\n\tEvent emitted after the call(s):\n\t- [DeployedWallet(wallet,_owner)](../../contracts/walletDeployer.sol#L59)\n", "id": "402373ea64c629a1e6a8492e757dbb4c9ae11b7e4687b3a69769d611ce299adb", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2976, "length": 1524, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])"}}, {"type": "node", "name": "wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()", "source_mapping": {"start": 3570, "length": 84, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [87], "starting_column": 9, "ending_column": 93}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2976, "length": 1524, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "MigratedWallet(wallet,_oldWallet,_owner,msg.value)", "source_mapping": {"start": 3664, "length": 58, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [88], "starting_column": 9, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "function", "name": "migrateWallet", "source_mapping": {"start": 2976, "length": 1524, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in WalletDeployer.migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[]) (../../contracts/walletDeployer.sol#72-112):\n\tExternal calls:\n\t- wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop() (../../contracts/walletDeployer.sol#87)\n\tEvent emitted after the call(s):\n\t- MigratedWallet(wallet,_oldWallet,_owner,msg.value) (../../contracts/walletDeployer.sol#88)\n", "markdown": "Reentrancy in [WalletDeployer.migrateWallet(address,address,bool,bool,bool,bool,uint256,uint256,uint256,address[])](../../contracts/walletDeployer.sol#L72-L112):\n\tExternal calls:\n\t- [wallet = IWalletCache(_ensResolve(walletCacheNode)).walletCachePop()](../../contracts/walletDeployer.sol#L87)\n\tEvent emitted after the call(s):\n\t- [MigratedWallet(wallet,_oldWallet,_owner,msg.value)](../../contracts/walletDeployer.sol#L88)\n", "id": "4a7fb4ad6d950016772175c04421bfb2683ec214fce6efed77598fd2843feae3", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletDeployer", "source_mapping": {"start": 998, "length": 3504, "filename_used": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_relative": "../../contracts/walletDeployer.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletDeployer.sol", "filename_short": "../../contracts/walletDeployer.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "WalletDeployer.slitherConstructorVariables() (../../contracts/walletDeployer.sol#28-113) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[WalletDeployer.slitherConstructorVariables()](../../contracts/walletDeployer.sol#L28-L113) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "f6fb64f21a2684f963798ca8643ba32f8b907a86dae7800a6403eaced385dbf2", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1165, "length": 16184, "filename_used": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_relative": "../../contracts/tokenWhitelist.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_short": "../../contracts/tokenWhitelist.sol", "is_dependency": false, "lines": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenWhitelist", "source_mapping": {"start": 1165, "length": 16184, "filename_used": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_relative": "../../contracts/tokenWhitelist.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_short": "../../contracts/tokenWhitelist.sol", "is_dependency": false, "lines": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1165, "length": 16184, "filename_used": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_relative": "../../contracts/tokenWhitelist.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_short": "../../contracts/tokenWhitelist.sol", "is_dependency": false, "lines": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenWhitelist", "source_mapping": {"start": 1165, "length": 16184, "filename_used": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_relative": "../../contracts/tokenWhitelist.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/tokenWhitelist.sol", "filename_short": "../../contracts/tokenWhitelist.sol", "is_dependency": false, "lines": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "TokenWhitelist.slitherConstructorVariables() (../../contracts/tokenWhitelist.sol#30-389) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[TokenWhitelist.slitherConstructorVariables()](../../contracts/tokenWhitelist.sol#L30-L389) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "3ba51ca2fd1cb5bc5e3b3f4e806726b88ab00ee0c96ae77cea1fa201fbd9e8e1", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "walletCachePop", "source_mapping": {"start": 3839, "length": 292, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "walletCachePop()"}}, {"type": "node", "name": "cacheWallet()", "source_mapping": {"start": 3973, "length": 13, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [98], "starting_column": 13, "ending_column": 26}, "type_specific_fields": {"parent": {"type": "function", "name": "walletCachePop", "source_mapping": {"start": 3839, "length": 292, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "walletCachePop()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4320, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)", "source_mapping": {"start": 4413, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "cachedWallets.pop()", "source_mapping": {"start": 4081, "length": 19, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [102], "starting_column": 9, "ending_column": 28}, "type_specific_fields": {"parent": {"type": "function", "name": "walletCachePop", "source_mapping": {"start": 3839, "length": 292, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [96, 97, 98, 99, 100, 101, 102, 103, 104, 105], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "walletCachePop()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "cachedWallets"}}], "description": "Reentrancy in WalletCache.walletCachePop() (../../contracts/walletCache.sol#96-105):\n\tExternal calls:\n\t- cacheWallet() (../../contracts/walletCache.sol#98)\n\t\t- wallet = address(new UpgradeabilityProxy(walletImplementation,)) (../../contracts/walletCache.sol#110)\n\t\t- IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit) (../../contracts/walletCache.sol#111-119)\n\tState variables written after the call(s):\n\t- cachedWallets.pop() (../../contracts/walletCache.sol#102)\n", "markdown": "Reentrancy in [WalletCache.walletCachePop()](../../contracts/walletCache.sol#L96-L105):\n\tExternal calls:\n\t- [cacheWallet()](../../contracts/walletCache.sol#L98)\n\t\t- [wallet = address(new UpgradeabilityProxy(walletImplementation,))](../../contracts/walletCache.sol#L110)\n\t\t- [IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)](../../contracts/walletCache.sol#L111-L119)\n\tState variables written after the call(s):\n\t- [cachedWallets.pop()](../../contracts/walletCache.sol#L102)\n", "id": "3ffb1bc3f21fab1b8590a3173be21b2f5cfb5d6d8265dc6d255832ee024c369a", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4320, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)", "source_mapping": {"start": 4413, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4320, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)", "source_mapping": {"start": 4413, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "cachedWallets.push(wallet)", "source_mapping": {"start": 4775, "length": 26, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [120], "starting_column": 9, "ending_column": 35}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "variables_written", "variable_name": "cachedWallets"}}], "description": "Reentrancy in WalletCache.cacheWallet() (../../contracts/walletCache.sol#108-123):\n\tExternal calls:\n\t- wallet = address(new UpgradeabilityProxy(walletImplementation,)) (../../contracts/walletCache.sol#110)\n\t- IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit) (../../contracts/walletCache.sol#111-119)\n\tState variables written after the call(s):\n\t- cachedWallets.push(wallet) (../../contracts/walletCache.sol#120)\n", "markdown": "Reentrancy in [WalletCache.cacheWallet()](../../contracts/walletCache.sol#L108-L123):\n\tExternal calls:\n\t- [wallet = address(new UpgradeabilityProxy(walletImplementation,))](../../contracts/walletCache.sol#L110)\n\t- [IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)](../../contracts/walletCache.sol#L111-L119)\n\tState variables written after the call(s):\n\t- [cachedWallets.push(wallet)](../../contracts/walletCache.sol#L120)\n", "id": "d3dd739fcff6db5a38dc65bdeeb41732a4c3a44a5d8ea06d002d7969c0ed43d6", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}, {"type": "node", "name": "wallet = address(new UpgradeabilityProxy(walletImplementation,))", "source_mapping": {"start": 4320, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [110], "starting_column": 9, "ending_column": 92}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)", "source_mapping": {"start": 4413, "length": 352, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [111, 112, 113, 114, 115, 116, 117, 118, 119], "starting_column": 9, "ending_column": 10}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "CachedWallet(wallet)", "source_mapping": {"start": 4812, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [122], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "cacheWallet", "source_mapping": {"start": 4207, "length": 637, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "cacheWallet()"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in WalletCache.cacheWallet() (../../contracts/walletCache.sol#108-123):\n\tExternal calls:\n\t- wallet = address(new UpgradeabilityProxy(walletImplementation,)) (../../contracts/walletCache.sol#110)\n\t- IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit) (../../contracts/walletCache.sol#111-119)\n\tEvent emitted after the call(s):\n\t- CachedWallet(wallet) (../../contracts/walletCache.sol#122)\n", "markdown": "Reentrancy in [WalletCache.cacheWallet()](../../contracts/walletCache.sol#L108-L123):\n\tExternal calls:\n\t- [wallet = address(new UpgradeabilityProxy(walletImplementation,))](../../contracts/walletCache.sol#L110)\n\t- [IWallet(wallet).initializeWallet(address(uint160(walletDeployerAddress)),true,ensRegistry(),tokenWhitelistNode,controllerNode(),licenceNode,defaultSpendLimit)](../../contracts/walletCache.sol#L111-L119)\n\tEvent emitted after the call(s):\n\t- [CachedWallet(wallet)](../../contracts/walletCache.sol#L122)\n", "id": "729f5a28e0bc8fd5a3ece7be02c86d5276e49a7e38cee307d7a8f28d47e624ad", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "WalletCache", "source_mapping": {"start": 1265, "length": 3581, "filename_used": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_relative": "../../contracts/walletCache.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/walletCache.sol", "filename_short": "../../contracts/walletCache.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "WalletCache.slitherConstructorVariables() (../../contracts/walletCache.sol#34-124) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[WalletCache.slitherConstructorVariables()](../../contracts/walletCache.sol#L34-L124) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "6ec589a43a86c3ef63ba62623f4aedb63ecec23673914983fe9fe63d9eaf71fc", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}, {"type": "node", "name": "mint /= 10 ** (mintExp - _magnitudeMult)", "source_mapping": {"start": 6770, "length": 38, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [129], "starting_column": 17, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}, {"type": "node", "name": "mint = mint.mul(10 ** (decMinted))", "source_mapping": {"start": 7657, "length": 32, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [147], "starting_column": 13, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}], "description": "ParseIntScientific._parseIntScientific(string,uint256) (../../contracts/internals/parseIntScientific.sol#50-164) performs a multiplication on the result of a division:\n\t-mint /= 10 ** (mintExp - _magnitudeMult) (../../contracts/internals/parseIntScientific.sol#129)\n\t-mint = mint.mul(10 ** (decMinted)) (../../contracts/internals/parseIntScientific.sol#147)\n", "markdown": "[ParseIntScientific._parseIntScientific(string,uint256)](../../contracts/internals/parseIntScientific.sol#L50-L164) performs a multiplication on the result of a division:\n\t-[mint /= 10 ** (mintExp - _magnitudeMult)](../../contracts/internals/parseIntScientific.sol#L129)\n\t-[mint = mint.mul(10 ** (decMinted))](../../contracts/internals/parseIntScientific.sol#L147)\n", "id": "a00cbae754b82e0580bb91c49d84e3f84757fe6b95d296e7f5362f4c52732bc2", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}, {"type": "node", "name": "mint /= 10 ** (mintExp - _magnitudeMult)", "source_mapping": {"start": 6770, "length": 38, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [129], "starting_column": 17, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}, {"type": "node", "name": "mint = mint.mul(10 ** (_magnitudeMult - decMinted))", "source_mapping": {"start": 7901, "length": 49, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [151], "starting_column": 13, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}], "description": "ParseIntScientific._parseIntScientific(string,uint256) (../../contracts/internals/parseIntScientific.sol#50-164) performs a multiplication on the result of a division:\n\t-mint /= 10 ** (mintExp - _magnitudeMult) (../../contracts/internals/parseIntScientific.sol#129)\n\t-mint = mint.mul(10 ** (_magnitudeMult - decMinted)) (../../contracts/internals/parseIntScientific.sol#151)\n", "markdown": "[ParseIntScientific._parseIntScientific(string,uint256)](../../contracts/internals/parseIntScientific.sol#L50-L164) performs a multiplication on the result of a division:\n\t-[mint /= 10 ** (mintExp - _magnitudeMult)](../../contracts/internals/parseIntScientific.sol#L129)\n\t-[mint = mint.mul(10 ** (_magnitudeMult - decMinted))](../../contracts/internals/parseIntScientific.sol#L151)\n", "id": "1d12d010b1dcecf3c2d9a7a85a0ed58b1deeaa0b934e4c4434affedabaac2cba", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}, {"type": "node", "name": "mint /= 10 ** (mintExp - _magnitudeMult)", "source_mapping": {"start": 6770, "length": 38, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [129], "starting_column": 17, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}, {"type": "node", "name": "mint = mint.mul(10 ** (_magnitudeMult))", "source_mapping": {"start": 8410, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [160], "starting_column": 13, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}], "description": "ParseIntScientific._parseIntScientific(string,uint256) (../../contracts/internals/parseIntScientific.sol#50-164) performs a multiplication on the result of a division:\n\t-mint /= 10 ** (mintExp - _magnitudeMult) (../../contracts/internals/parseIntScientific.sol#129)\n\t-mint = mint.mul(10 ** (_magnitudeMult)) (../../contracts/internals/parseIntScientific.sol#160)\n", "markdown": "[ParseIntScientific._parseIntScientific(string,uint256)](../../contracts/internals/parseIntScientific.sol#L50-L164) performs a multiplication on the result of a division:\n\t-[mint /= 10 ** (mintExp - _magnitudeMult)](../../contracts/internals/parseIntScientific.sol#L129)\n\t-[mint = mint.mul(10 ** (_magnitudeMult))](../../contracts/internals/parseIntScientific.sol#L160)\n", "id": "e91e10a4132eaefdd900d02403aa4e7f44e4a4f6cd387cba17518f54a90bc2ab", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}, {"type": "node", "name": "mintDec /= 10 ** (decMinted)", "source_mapping": {"start": 8227, "length": 26, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [157], "starting_column": 13, "ending_column": 39}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}, {"type": "node", "name": "mintDec = mintDec.mul(10)", "source_mapping": {"start": 3724, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [69], "starting_column": 21, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}], "description": "ParseIntScientific._parseIntScientific(string,uint256) (../../contracts/internals/parseIntScientific.sol#50-164) performs a multiplication on the result of a division:\n\t-mintDec /= 10 ** (decMinted) (../../contracts/internals/parseIntScientific.sol#157)\n\t-mintDec = mintDec.mul(10) (../../contracts/internals/parseIntScientific.sol#69)\n", "markdown": "[ParseIntScientific._parseIntScientific(string,uint256)](../../contracts/internals/parseIntScientific.sol#L50-L164) performs a multiplication on the result of a division:\n\t-[mintDec /= 10 ** (decMinted)](../../contracts/internals/parseIntScientific.sol#L157)\n\t-[mintDec = mintDec.mul(10)](../../contracts/internals/parseIntScientific.sol#L69)\n", "id": "b07f9d14a8de905177c26444d3943a865a87c6f31f38a7867352b2ad2bbfcd1b", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}, {"type": "node", "name": "mint /= 10 ** (mintExp - _magnitudeMult)", "source_mapping": {"start": 6770, "length": 38, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [129], "starting_column": 17, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}, {"type": "node", "name": "mint = mint.mul(10)", "source_mapping": {"start": 4094, "length": 19, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [76], "starting_column": 21, "ending_column": 40}, "type_specific_fields": {"parent": {"type": "function", "name": "_parseIntScientific", "source_mapping": {"start": 2373, "length": 6150, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ParseIntScientific", "source_mapping": {"start": 986, "length": 7539, "filename_used": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_relative": "../../contracts/internals/parseIntScientific.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/parseIntScientific.sol", "filename_short": "../../contracts/internals/parseIntScientific.sol", "is_dependency": false, "lines": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165], "starting_column": 1, "ending_column": 2}}, "signature": "_parseIntScientific(string,uint256)"}}}}], "description": "ParseIntScientific._parseIntScientific(string,uint256) (../../contracts/internals/parseIntScientific.sol#50-164) performs a multiplication on the result of a division:\n\t-mint /= 10 ** (mintExp - _magnitudeMult) (../../contracts/internals/parseIntScientific.sol#129)\n\t-mint = mint.mul(10) (../../contracts/internals/parseIntScientific.sol#76)\n", "markdown": "[ParseIntScientific._parseIntScientific(string,uint256)](../../contracts/internals/parseIntScientific.sol#L50-L164) performs a multiplication on the result of a division:\n\t-[mint /= 10 ** (mintExp - _magnitudeMult)](../../contracts/internals/parseIntScientific.sol#L129)\n\t-[mint = mint.mul(10)](../../contracts/internals/parseIntScientific.sol#L76)\n", "id": "0e970ab548d58d51263afb00b0f30a0d9498eb69cd76f96228dfaabb8a30df4b", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "parseRate", "source_mapping": {"start": 4890, "length": 874, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Oracle", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}}, "signature": "parseRate(string)"}}, {"type": "node", "name": "body.split(:.toSlice())", "source_mapping": {"start": 5420, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [126], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "parseRate", "source_mapping": {"start": 4890, "length": 874, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Oracle", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}}, "signature": "parseRate(string)"}}}}], "description": "Oracle.parseRate(string) (../../contracts/oracle.sol#116-133) ignores return value by body.split(:.toSlice()) (../../contracts/oracle.sol#126)\n", "markdown": "[Oracle.parseRate(string)](../../contracts/oracle.sol#L116-L133) ignores return value by [body.split(:.toSlice())](../../contracts/oracle.sol#L126)\n", "id": "21f8486b9622b298d2d789c38e02589e0f8f285ae2afcf1c5e8d557d2ed414d8", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "parseRate", "source_mapping": {"start": 4890, "length": 874, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Oracle", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}}, "signature": "parseRate(string)"}}, {"type": "node", "name": "body.until(}.toSlice())", "source_mapping": {"start": 5573, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [129], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "parseRate", "source_mapping": {"start": 4890, "length": 874, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Oracle", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}}, "signature": "parseRate(string)"}}}}], "description": "Oracle.parseRate(string) (../../contracts/oracle.sol#116-133) ignores return value by body.until(}.toSlice()) (../../contracts/oracle.sol#129)\n", "markdown": "[Oracle.parseRate(string)](../../contracts/oracle.sol#L116-L133) ignores return value by [body.until(}.toSlice())](../../contracts/oracle.sol#L129)\n", "id": "30217163eae600a9621a0d1eddc7e5fe773b534668ab60f48a814761acaa25c8", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Oracle", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Oracle", "source_mapping": {"start": 1244, "length": 10242, "filename_used": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_relative": "../../contracts/oracle.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/oracle.sol", "filename_short": "../../contracts/oracle.sol", "is_dependency": false, "lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "Oracle.slitherConstructorVariables() (../../contracts/oracle.sol#34-271) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[Oracle.slitherConstructorVariables()](../../contracts/oracle.sol#L34-L271) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "1ccc8623a1b94671b5a93fca4cd2c83f1a9019002669cd6f59043b11a6ad200a", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1288, "length": 3602, "filename_used": "/contracts/tools/slither/../../contracts/holder.sol", "filename_relative": "../../contracts/holder.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/holder.sol", "filename_short": "../../contracts/holder.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Holder", "source_mapping": {"start": 1288, "length": 3602, "filename_used": "/contracts/tools/slither/../../contracts/holder.sol", "filename_relative": "../../contracts/holder.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/holder.sol", "filename_short": "../../contracts/holder.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1288, "length": 3602, "filename_used": "/contracts/tools/slither/../../contracts/holder.sol", "filename_relative": "../../contracts/holder.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/holder.sol", "filename_short": "../../contracts/holder.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Holder", "source_mapping": {"start": 1288, "length": 3602, "filename_used": "/contracts/tools/slither/../../contracts/holder.sol", "filename_relative": "../../contracts/holder.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/holder.sol", "filename_short": "../../contracts/holder.sol", "is_dependency": false, "lines": [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "Holder.slitherConstructorVariables() (../../contracts/holder.sol#33-115) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[Holder.slitherConstructorVariables()](../../contracts/holder.sol#L33-L115) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "ab16c2a943e01c8201ac13da06217a3749fd06371ab968890b731a984fcdee99", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 33697, "length": 1540, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}, {"type": "node", "name": "amountToSend = _amount.mul(rate).div(magnitude)", "source_mapping": {"start": 34588, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [750], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 33697, "length": 1540, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}, {"type": "node", "name": "amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)", "source_mapping": {"start": 35166, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [759], "starting_column": 9, "ending_column": 73}, "type_specific_fields": {"parent": {"type": "function", "name": "convertToStablecoin", "source_mapping": {"start": 33697, "length": 1540, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "convertToStablecoin(address,uint256)"}}}}], "description": "Wallet.convertToStablecoin(address,uint256) (../../contracts/wallet.sol#734-760) performs a multiplication on the result of a division:\n\t-amountToSend = _amount.mul(rate).div(magnitude) (../../contracts/wallet.sol#750)\n\t-amountToSend.mul(stablecoinMagnitude).div(stablecoinRate) (../../contracts/wallet.sol#759)\n", "markdown": "[Wallet.convertToStablecoin(address,uint256)](../../contracts/wallet.sol#L734-L760) performs a multiplication on the result of a division:\n\t-[amountToSend = _amount.mul(rate).div(magnitude)](../../contracts/wallet.sol#L750)\n\t-[amountToSend.mul(stablecoinMagnitude).div(stablecoinRate)](../../contracts/wallet.sol#L759)\n", "id": "6445d302d697fb16f8a229d2e9573ca790c2c85a9aa543810c45b2944e1e6f31", "check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "_tokenWhitelistNode", "source_mapping": {"start": 21839, "length": 27, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [498], "starting_column": 35, "ending_column": 62}, "type_specific_fields": {"parent": {"type": "function", "name": "_initializeLoadLimit", "source_mapping": {"start": 21809, "length": 464, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [498, 499, 500, 501, 502, 503, 504], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "LoadLimit", "source_mapping": {"start": 19723, "length": 2552, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505], "starting_column": 1, "ending_column": 2}}, "signature": "_initializeLoadLimit(bytes32)"}}}}, {"type": "variable", "name": "_tokenWhitelistNode", "source_mapping": {"start": 1348, "length": 67, "filename_used": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_relative": "../../contracts/internals/tokenWhitelistable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_short": "../../contracts/internals/tokenWhitelistable.sol", "is_dependency": false, "lines": [33], "starting_column": 5, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "contract", "name": "TokenWhitelistable", "source_mapping": {"start": 1045, "length": 5236, "filename_used": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_relative": "../../contracts/internals/tokenWhitelistable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/tokenWhitelistable.sol", "filename_short": "../../contracts/internals/tokenWhitelistable.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155], "starting_column": 1, "ending_column": 2}}}}], "description": "LoadLimit._initializeLoadLimit(bytes32)._tokenWhitelistNode (../../contracts/wallet.sol#498) shadows:\n\t- TokenWhitelistable._tokenWhitelistNode (../../contracts/internals/tokenWhitelistable.sol#33) (state variable)\n", "markdown": "[LoadLimit._initializeLoadLimit(bytes32)._tokenWhitelistNode](../../contracts/wallet.sol#L498) shadows:\n\t- [TokenWhitelistable._tokenWhitelistNode](../../contracts/internals/tokenWhitelistable.sol#L33) (state variable)\n", "id": "8f15cbf6d24a4b17962fde5591cd20736fc2ed8d234ab44f7ef3eab547790f4e", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 25611, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}, {"type": "node", "name": "(success,returnData) = address(this).call(_data)", "source_mapping": {"start": 26571, "length": 67, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [594], "starting_column": 9, "ending_column": 76}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 25611, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedRelayedTransaction(_data,returnData)", "source_mapping": {"start": 26695, "length": 50, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [597], "starting_column": 9, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "executeRelayedTransaction", "source_mapping": {"start": 25611, "length": 1141, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeRelayedTransaction(uint256,bytes,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeRelayedTransaction(uint256,bytes,bytes) (../../contracts/wallet.sol#575-598):\n\tExternal calls:\n\t- (success,returnData) = address(this).call(_data) (../../contracts/wallet.sol#594)\n\tEvent emitted after the call(s):\n\t- ExecutedRelayedTransaction(_data,returnData) (../../contracts/wallet.sol#597)\n", "markdown": "Reentrancy in [Wallet.executeRelayedTransaction(uint256,bytes,bytes)](../../contracts/wallet.sol#L575-L598):\n\tExternal calls:\n\t- [(success,returnData) = address(this).call(_data)](../../contracts/wallet.sol#L594)\n\tEvent emitted after the call(s):\n\t- [ExecutedRelayedTransaction(_data,returnData)](../../contracts/wallet.sol#L597)\n", "id": "fd7a2414668142cb7d8c6e926deb48e7d79b488892a1c4124a90ee572a54f66b", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 35497, "length": 1967, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "IERC20(_destination)._callOptionalReturn(_data)", "source_mapping": {"start": 36836, "length": 47, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [790], "starting_column": 13, "ending_column": 60}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 35497, "length": 1967, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,b)", "source_mapping": {"start": 37058, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [796], "starting_column": 13, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 35497, "length": 1967, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#766-806):\n\tExternal calls:\n\t- IERC20(_destination)._callOptionalReturn(_data) (../../contracts/wallet.sol#790)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,b) (../../contracts/wallet.sol#796)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L766-L806):\n\tExternal calls:\n\t- [IERC20(_destination)._callOptionalReturn(_data)](../../contracts/wallet.sol#L790)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,b)](../../contracts/wallet.sol#L796)\n", "id": "65cc0d4c07c009b76fbfb0b4d3e00279b26b42291be351fa85d02d52289ddb55", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 35497, "length": 1967, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 37157, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [800], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 35497, "length": 1967, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 37295, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [803], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 35497, "length": 1967, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.executeTransaction(address,uint256,bytes) (../../contracts/wallet.sol#766-806):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/wallet.sol#800)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/wallet.sol#803)\n", "markdown": "Reentrancy in [Wallet.executeTransaction(address,uint256,bytes)](../../contracts/wallet.sol#L766-L806):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/wallet.sol#L800)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/wallet.sol#L803)\n", "id": "a7bcadd27f5cdccdaaa907a36b948f11ba25788811f5335bf5a24502fa4512dd", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 28508, "length": 945, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeApprove(licenceAddress,_amount)", "source_mapping": {"start": 29184, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [648], "starting_column": 13, "ending_column": 64}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 28508, "length": 945, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load(_asset,_amount)", "source_mapping": {"start": 29249, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [649], "starting_column": 13, "ending_column": 59}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 28508, "length": 945, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 29326, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [651], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 28508, "length": 945, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ILicence(licenceAddress).load{value: _amount}(_asset,_amount)", "source_mapping": {"start": 29326, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [651], "starting_column": 13, "ending_column": 75}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 28508, "length": 945, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "LoadedTokenCard(_asset,_amount)", "source_mapping": {"start": 29409, "length": 37, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [654], "starting_column": 9, "ending_column": 46}, "type_specific_fields": {"parent": {"type": "function", "name": "loadTokenCard", "source_mapping": {"start": 28508, "length": 945, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "loadTokenCard(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.loadTokenCard(address,uint256) (../../contracts/wallet.sol#638-655):\n\tExternal calls:\n\t- IERC20(_asset).safeApprove(licenceAddress,_amount) (../../contracts/wallet.sol#648)\n\t- ILicence(licenceAddress).load(_asset,_amount) (../../contracts/wallet.sol#649)\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#651)\n\tExternal calls sending eth:\n\t- ILicence(licenceAddress).load{value: _amount}(_asset,_amount) (../../contracts/wallet.sol#651)\n\tEvent emitted after the call(s):\n\t- LoadedTokenCard(_asset,_amount) (../../contracts/wallet.sol#654)\n", "markdown": "Reentrancy in [Wallet.loadTokenCard(address,uint256)](../../contracts/wallet.sol#L638-L655):\n\tExternal calls:\n\t- [IERC20(_asset).safeApprove(licenceAddress,_amount)](../../contracts/wallet.sol#L648)\n\t- [ILicence(licenceAddress).load(_asset,_amount)](../../contracts/wallet.sol#L649)\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L651)\n\tExternal calls sending eth:\n\t- [ILicence(licenceAddress).load{value: _amount}(_asset,_amount)](../../contracts/wallet.sol#L651)\n\tEvent emitted after the call(s):\n\t- [LoadedTokenCard(_asset,_amount)](../../contracts/wallet.sol#L654)\n", "id": "6d9ec72b6be638f2f6ce2dc892658392de55592a20b6c03e6b8cb771c5881a97", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_getAvailableLimit", "source_mapping": {"start": 12736, "length": 240, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [276, 277, 278, 279, 280, 281, 282], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_getAvailableLimit(DailyLimitTrait.DailyLimit)"}}, {"type": "node", "name": "now > self.limitTimestamp.add(86400)", "source_mapping": {"start": 12835, "length": 39, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [277], "starting_column": 13, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "_getAvailableLimit", "source_mapping": {"start": 12736, "length": 240, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [276, 277, 278, 279, 280, 281, 282], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_getAvailableLimit(DailyLimitTrait.DailyLimit)"}}}}], "description": "DailyLimitTrait._getAvailableLimit(DailyLimitTrait.DailyLimit) (../../contracts/wallet.sol#276-282) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > self.limitTimestamp.add(86400) (../../contracts/wallet.sol#277)\n", "markdown": "[DailyLimitTrait._getAvailableLimit(DailyLimitTrait.DailyLimit)](../../contracts/wallet.sol#L276-L282) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > self.limitTimestamp.add(86400)](../../contracts/wallet.sol#L277)\n", "id": "a88a1183e45466591a276356c926ebf70a5ac492c7271546b57f1909cf4fb60d", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "_updateAvailableLimit", "source_mapping": {"start": 14578, "length": 370, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [318, 319, 320, 321, 322, 323, 324, 325, 326], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableLimit(DailyLimitTrait.DailyLimit)"}}, {"type": "node", "name": "now > self.limitTimestamp.add(86400)", "source_mapping": {"start": 14656, "length": 39, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [319], "starting_column": 13, "ending_column": 52}, "type_specific_fields": {"parent": {"type": "function", "name": "_updateAvailableLimit", "source_mapping": {"start": 14578, "length": 370, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [318, 319, 320, 321, 322, 323, 324, 325, 326], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DailyLimitTrait", "source_mapping": {"start": 11495, "length": 3455, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327], "starting_column": 1, "ending_column": 2}}, "signature": "_updateAvailableLimit(DailyLimitTrait.DailyLimit)"}}}}], "description": "DailyLimitTrait._updateAvailableLimit(DailyLimitTrait.DailyLimit) (../../contracts/wallet.sol#318-326) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- now > self.limitTimestamp.add(86400) (../../contracts/wallet.sol#319)\n", "markdown": "[DailyLimitTrait._updateAvailableLimit(DailyLimitTrait.DailyLimit)](../../contracts/wallet.sol#L318-L326) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [now > self.limitTimestamp.add(86400)](../../contracts/wallet.sol#L319)\n", "id": "79967c539447e17dc6ee9c3ea09ef3fb94efe619db1c107e91000247e937d1b9", "check": "timestamp", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "topUpGas", "source_mapping": {"start": 29844, "length": 567, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [664, 665, 666, 667, 668, 669, 670, 671, 672, 673], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}, {"type": "node", "name": "owner().transfer(_amount)", "source_mapping": {"start": 30285, "length": 25, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [670], "starting_column": 9, "ending_column": 34}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 29844, "length": 567, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [664, 665, 666, 667, 668, 669, 670, 671, 672, 673], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "ToppedUpGas(msg.sender,owner(),_amount)", "source_mapping": {"start": 30358, "length": 46, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [672], "starting_column": 9, "ending_column": 55}, "type_specific_fields": {"parent": {"type": "function", "name": "topUpGas", "source_mapping": {"start": 29844, "length": 567, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [664, 665, 666, 667, 668, 669, 670, 671, 672, 673], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "topUpGas(uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Wallet.topUpGas(uint256) (../../contracts/wallet.sol#664-673):\n\tExternal calls:\n\t- owner().transfer(_amount) (../../contracts/wallet.sol#670)\n\tEvent emitted after the call(s):\n\t- ToppedUpGas(msg.sender,owner(),_amount) (../../contracts/wallet.sol#672)\n", "markdown": "Reentrancy in [Wallet.topUpGas(uint256)](../../contracts/wallet.sol#L664-L673):\n\tExternal calls:\n\t- [owner().transfer(_amount)](../../contracts/wallet.sol#L670)\n\tEvent emitted after the call(s):\n\t- [ToppedUpGas(msg.sender,owner(),_amount)](../../contracts/wallet.sol#L672)\n", "id": "b3cf8530bb4219f6181fdec9d6e56a23dd51951afbacf23b2c46ee363b79da5d", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "Wallet.slitherConstructorVariables() (../../contracts/wallet.sol#508-847) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[Wallet.slitherConstructorVariables()](../../contracts/wallet.sol#L508-L847) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "2fe37a4cad071bfa6d82a1450bfeecafbc3e29abd64963b028105a4d9582ef0a", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "batchExecuteTransaction", "source_mapping": {"start": 30743, "length": 2016, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "batchExecuteTransaction(bytes)"}}], "description": "batchExecuteTransaction(bytes) should be declared external:\n\t- Wallet.batchExecuteTransaction(bytes) (../../contracts/wallet.sol#679-714)\n", "markdown": "batchExecuteTransaction(bytes) should be declared external:\n\t- [Wallet.batchExecuteTransaction(bytes)](../../contracts/wallet.sol#L679-L714)\n", "id": "25be393b22a852005aebc844d44187435f0cfff81e7632ced668dd912f0e2261", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "transfer", "source_mapping": {"start": 38268, "length": 1127, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Wallet", "source_mapping": {"start": 22375, "length": 17022, "filename_used": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_relative": "../../contracts/wallet.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/wallet.sol", "filename_short": "../../contracts/wallet.sol", "is_dependency": false, "lines": [508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847], "starting_column": 1, "ending_column": 2}}, "signature": "transfer(address,address,uint256)"}}], "description": "transfer(address,address,uint256) should be declared external:\n\t- Wallet.transfer(address,address,uint256) (../../contracts/wallet.sol#822-846)\n", "markdown": "transfer(address,address,uint256) should be declared external:\n\t- [Wallet.transfer(address,address,uint256)](../../contracts/wallet.sol#L822-L846)\n", "id": "b19b3dda14789ad85379258374bd5193fe48580bb2ea18c14a6866357ec7209b", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}}], "description": "Licence.load(address,uint256) (../../contracts/licence.sol#201-223) sends eth to arbitrary user\n\tDangerous calls:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n", "markdown": "[Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223) sends eth to arbitrary user\n\tDangerous calls:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n", "id": "77a1d9fb3657ae0373a1ee2191c5fba1c04170d16f4a8c073a174eedb2b6bc4b", "check": "arbitrary-send", "impact": "High", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)", "source_mapping": {"start": 8589, "length": 72, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [211], "starting_column": 17, "ending_column": 89}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)", "source_mapping": {"start": 8679, "length": 69, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [212], "starting_column": 17, "ending_column": 86}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)", "source_mapping": {"start": 8985, "length": 78, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [219], "starting_column": 13, "ending_column": 91}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Licence.load(address,uint256) (../../contracts/licence.sol#201-223):\n\tExternal calls:\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount) (../../contracts/licence.sol#211)\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount) (../../contracts/licence.sol#212)\n\tExternal calls sending eth:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n\tEvent emitted after the call(s):\n\t- TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount) (../../contracts/licence.sol#219)\n", "markdown": "Reentrancy in [Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223):\n\tExternal calls:\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)](../../contracts/licence.sol#L211)\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)](../../contracts/licence.sol#L212)\n\tExternal calls sending eth:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n\tEvent emitted after the call(s):\n\t- [TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)](../../contracts/licence.sol#L219)\n", "id": "ab8f3835605e2d6159e5db4f37dce11ccdcd6f5bd12fff12d51622a9cb8e5453", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)", "source_mapping": {"start": 8282, "length": 69, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [205], "starting_column": 13, "ending_column": 82}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)", "source_mapping": {"start": 8589, "length": 72, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [211], "starting_column": 17, "ending_column": 89}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)", "source_mapping": {"start": 8679, "length": 69, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [212], "starting_column": 17, "ending_column": 86}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)", "source_mapping": {"start": 9084, "length": 75, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [222], "starting_column": 9, "ending_column": 84}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Licence.load(address,uint256) (../../contracts/licence.sol#201-223):\n\tExternal calls:\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount) (../../contracts/licence.sol#205)\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount) (../../contracts/licence.sol#211)\n\t- IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount) (../../contracts/licence.sol#212)\n\tExternal calls sending eth:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n\tEvent emitted after the call(s):\n\t- TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount) (../../contracts/licence.sol#222)\n", "markdown": "Reentrancy in [Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223):\n\tExternal calls:\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)](../../contracts/licence.sol#L205)\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_tokenHolder,licenceAmount)](../../contracts/licence.sol#L211)\n\t- [IERC20(_asset).safeTransferFrom(msg.sender,_cryptoFloat,loadAmount)](../../contracts/licence.sol#L212)\n\tExternal calls sending eth:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n\tEvent emitted after the call(s):\n\t- [TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)](../../contracts/licence.sol#L222)\n", "id": "0b66bfae7ffcf90f00f0a76079b285289d517503f7c8d1dd100edcc09956113e", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}, {"type": "node", "name": "_tokenHolder.transfer(licenceAmount)", "source_mapping": {"start": 8869, "length": 36, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [215], "starting_column": 17, "ending_column": 53}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_cryptoFloat.transfer(loadAmount)", "source_mapping": {"start": 8923, "length": 33, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [216], "starting_column": 17, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)", "source_mapping": {"start": 9084, "length": 75, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [222], "starting_column": 9, "ending_column": 84}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}, {"type": "node", "name": "TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)", "source_mapping": {"start": 8985, "length": 78, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [219], "starting_column": 13, "ending_column": 91}, "type_specific_fields": {"parent": {"type": "function", "name": "load", "source_mapping": {"start": 8076, "length": 1090, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "load(address,uint256)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in Licence.load(address,uint256) (../../contracts/licence.sol#201-223):\n\tExternal calls:\n\t- _tokenHolder.transfer(licenceAmount) (../../contracts/licence.sol#215)\n\t- _cryptoFloat.transfer(loadAmount) (../../contracts/licence.sol#216)\n\tEvent emitted after the call(s):\n\t- TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount) (../../contracts/licence.sol#222)\n\t- TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount) (../../contracts/licence.sol#219)\n", "markdown": "Reentrancy in [Licence.load(address,uint256)](../../contracts/licence.sol#L201-L223):\n\tExternal calls:\n\t- [_tokenHolder.transfer(licenceAmount)](../../contracts/licence.sol#L215)\n\t- [_cryptoFloat.transfer(loadAmount)](../../contracts/licence.sol#L216)\n\tEvent emitted after the call(s):\n\t- [TransferredToCryptoFloat(msg.sender,_cryptoFloat,_asset,loadAmount)](../../contracts/licence.sol#L222)\n\t- [TransferredToTokenHolder(msg.sender,_tokenHolder,_asset,licenceAmount)](../../contracts/licence.sol#L219)\n", "id": "bbb126fc2fc1618ff0d13105f131a70023ab7963d1556c263706b87552939c1c", "check": "reentrancy-unlimited-gas", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "Licence", "source_mapping": {"start": 1179, "length": 8978, "filename_used": "/contracts/tools/slither/../../contracts/licence.sol", "filename_relative": "../../contracts/licence.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/licence.sol", "filename_short": "../../contracts/licence.sol", "is_dependency": false, "lines": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "Licence.slitherConstructorVariables() (../../contracts/licence.sol#31-254) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[Licence.slitherConstructorVariables()](../../contracts/licence.sol#L31-L254) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "ddd5fb5c3b142504e4277598a2547e1741a8d933f34e84e86b548befebf2252b", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "refundGas", "source_mapping": {"start": 1687, "length": 274, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasRefundable", "source_mapping": {"start": 901, "length": 2256, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "refundGas()"}}, {"type": "node", "name": "_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)", "source_mapping": {"start": 1847, "length": 107, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [44], "starting_column": 9, "ending_column": 116}, "type_specific_fields": {"parent": {"type": "function", "name": "refundGas", "source_mapping": {"start": 1687, "length": 274, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasRefundable", "source_mapping": {"start": 901, "length": 2256, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "refundGas()"}}}}], "description": "GasRefundable.refundGas() (../../contracts/internals/gasRefundable.sol#40-45) ignores return value by _gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit) (../../contracts/internals/gasRefundable.sol#44)\n", "markdown": "[GasRefundable.refundGas()](../../contracts/internals/gasRefundable.sol#L40-L45) ignores return value by [_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)](../../contracts/internals/gasRefundable.sol#L44)\n", "id": "b75743d2bf9fc11b85a8d9fdebf99c34d10435409f23409fa2d0973b85c8c081", "check": "unused-return", "impact": "Medium", "confidence": "Medium"}, {"elements": [{"type": "variable", "name": "owner", "source_mapping": {"start": 641, "length": 13, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [20], "starting_column": 59, "ending_column": 72}, "type_specific_fields": {"parent": {"type": "function", "name": "setSubnodeOwner", "source_mapping": {"start": 587, "length": 78, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [20], "starting_column": 5, "ending_column": 83}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setSubnodeOwner(bytes32,bytes32,address)"}}}}, {"type": "function", "name": "owner", "source_mapping": {"start": 854, "length": 61, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [24], "starting_column": 5, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "owner(bytes32)"}}], "description": "IENS.setSubnodeOwner(bytes32,bytes32,address).owner (../../contracts/interfaces/IENS.sol#20) shadows:\n\t- IENS.owner(bytes32) (../../contracts/interfaces/IENS.sol#24) (function)\n", "markdown": "[IENS.setSubnodeOwner(bytes32,bytes32,address).owner](../../contracts/interfaces/IENS.sol#L20) shadows:\n\t- [IENS.owner(bytes32)](../../contracts/interfaces/IENS.sol#L24) (function)\n", "id": "b8efeadf77d41b1a7d348368cca9449309ebb832456da6bf37c0342bf862a499", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "resolver", "source_mapping": {"start": 705, "length": 16, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [21], "starting_column": 40, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "function", "name": "setResolver", "source_mapping": {"start": 670, "length": 62, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [21], "starting_column": 5, "ending_column": 67}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setResolver(bytes32,address)"}}}}, {"type": "function", "name": "resolver", "source_mapping": {"start": 920, "length": 64, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [25], "starting_column": 5, "ending_column": 69}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "resolver(bytes32)"}}], "description": "IENS.setResolver(bytes32,address).resolver (../../contracts/interfaces/IENS.sol#21) shadows:\n\t- IENS.resolver(bytes32) (../../contracts/interfaces/IENS.sol#25) (function)\n", "markdown": "[IENS.setResolver(bytes32,address).resolver](../../contracts/interfaces/IENS.sol#L21) shadows:\n\t- [IENS.resolver(bytes32)](../../contracts/interfaces/IENS.sol#L25) (function)\n", "id": "130d460d673393efe8a8da0e46e6b069c8552de929f23a9872afa5af3064cfd3", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "owner", "source_mapping": {"start": 769, "length": 13, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [22], "starting_column": 37, "ending_column": 50}, "type_specific_fields": {"parent": {"type": "function", "name": "setOwner", "source_mapping": {"start": 737, "length": 56, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [22], "starting_column": 5, "ending_column": 61}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setOwner(bytes32,address)"}}}}, {"type": "function", "name": "owner", "source_mapping": {"start": 854, "length": 61, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [24], "starting_column": 5, "ending_column": 66}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "owner(bytes32)"}}], "description": "IENS.setOwner(bytes32,address).owner (../../contracts/interfaces/IENS.sol#22) shadows:\n\t- IENS.owner(bytes32) (../../contracts/interfaces/IENS.sol#24) (function)\n", "markdown": "[IENS.setOwner(bytes32,address).owner](../../contracts/interfaces/IENS.sol#L22) shadows:\n\t- [IENS.owner(bytes32)](../../contracts/interfaces/IENS.sol#L24) (function)\n", "id": "68a9c62e14cf270cc78b15e4f6eff049bf028789e5364f716487844103314b09", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "variable", "name": "ttl", "source_mapping": {"start": 828, "length": 10, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [23], "starting_column": 35, "ending_column": 45}, "type_specific_fields": {"parent": {"type": "function", "name": "setTTL", "source_mapping": {"start": 798, "length": 51, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [23], "starting_column": 5, "ending_column": 56}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "setTTL(bytes32,uint64)"}}}}, {"type": "function", "name": "ttl", "source_mapping": {"start": 989, "length": 58, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [26], "starting_column": 5, "ending_column": 63}, "type_specific_fields": {"parent": {"type": "contract", "name": "IENS", "source_mapping": {"start": 61, "length": 989, "filename_used": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_relative": "../../contracts/interfaces/IENS.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/interfaces/IENS.sol", "filename_short": "../../contracts/interfaces/IENS.sol", "is_dependency": false, "lines": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "starting_column": 1, "ending_column": null}}, "signature": "ttl(bytes32)"}}], "description": "IENS.setTTL(bytes32,uint64).ttl (../../contracts/interfaces/IENS.sol#23) shadows:\n\t- IENS.ttl(bytes32) (../../contracts/interfaces/IENS.sol#26) (function)\n", "markdown": "[IENS.setTTL(bytes32,uint64).ttl](../../contracts/interfaces/IENS.sol#L23) shadows:\n\t- [IENS.ttl(bytes32)](../../contracts/interfaces/IENS.sol#L26) (function)\n", "id": "a69f8ad16df8947c6709bf091d37a3ec734d1ab5151c7135b5df2cc84378909c", "check": "shadowing-local", "impact": "Low", "confidence": "High"}, {"elements": [{"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 2282, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [50], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "refundGas()", "source_mapping": {"start": 2239, "length": 9, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [49], "starting_column": 39, "ending_column": 48}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls"}}, {"type": "node", "name": "_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)", "source_mapping": {"start": 1847, "length": 107, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [44], "starting_column": 9, "ending_column": 116}, "type_specific_fields": {"parent": {"type": "function", "name": "refundGas", "source_mapping": {"start": 1687, "length": 274, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [40, 41, 42, 43, 44, 45], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasRefundable", "source_mapping": {"start": 901, "length": 2256, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "starting_column": 1, "ending_column": 2}}, "signature": "refundGas()"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "(success,returnData) = _destination.call{value: _value}(_data)", "source_mapping": {"start": 2282, "length": 81, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [50], "starting_column": 9, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "external_calls_sending_eth"}}, {"type": "node", "name": "ExecutedTransaction(_destination,_value,_data,returnData)", "source_mapping": {"start": 2423, "length": 65, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [52], "starting_column": 9, "ending_column": 74}, "type_specific_fields": {"parent": {"type": "function", "name": "executeTransaction", "source_mapping": {"start": 2089, "length": 433, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "executeTransaction(address,uint256,bytes)"}}}, "additional_fields": {"underlying_type": "event"}}], "description": "Reentrancy in GasProxy.executeTransaction(address,uint256,bytes) (../../contracts/gasProxy.sol#45-54):\n\tExternal calls:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/gasProxy.sol#50)\n\t- refundGas() (../../contracts/gasProxy.sol#49)\n\t\t- _gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit) (../../contracts/internals/gasRefundable.sol#44)\n\tExternal calls sending eth:\n\t- (success,returnData) = _destination.call{value: _value}(_data) (../../contracts/gasProxy.sol#50)\n\tEvent emitted after the call(s):\n\t- ExecutedTransaction(_destination,_value,_data,returnData) (../../contracts/gasProxy.sol#52)\n", "markdown": "Reentrancy in [GasProxy.executeTransaction(address,uint256,bytes)](../../contracts/gasProxy.sol#L45-L54):\n\tExternal calls:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/gasProxy.sol#L50)\n\t- [refundGas()](../../contracts/gasProxy.sol#L49)\n\t\t- [_gasToken.freeUpTo((gasSpent + _gasTokenParameters.freeCallGasCost) / _gasTokenParameters.gasRefundPerUnit)](../../contracts/internals/gasRefundable.sol#L44)\n\tExternal calls sending eth:\n\t- [(success,returnData) = _destination.call{value: _value}(_data)](../../contracts/gasProxy.sol#L50)\n\tEvent emitted after the call(s):\n\t- [ExecutedTransaction(_destination,_value,_data,returnData)](../../contracts/gasProxy.sol#L52)\n", "id": "068c35828662fe2aa881b25e2c4d696b8f9ef37468232254c1c64db5f71f0109", "check": "reentrancy-events", "impact": "Low", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)", "source_mapping": {"start": 1216, "length": 82, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [31], "starting_column": 5, "ending_column": 87}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "GasProxy.slitherConstructorVariables() (../../contracts/gasProxy.sol#24-55) uses literals with too many digits:\n\t- _ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e) (../../contracts/internals/ensResolvable.sol#31)\n", "markdown": "[GasProxy.slitherConstructorVariables()](../../contracts/gasProxy.sol#L24-L55) uses literals with too many digits:\n\t- [_ensRegistry = address(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e)](../../contracts/internals/ensResolvable.sol#L31)\n", "id": "8d59c600de2d2cc19c4bf271ece114c7e452982cd3d73eaec8ac52f4452c3633", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}, {"type": "node", "name": "_gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c)", "source_mapping": {"start": 1267, "length": 83, "filename_used": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_relative": "../../contracts/internals/gasRefundable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/gasRefundable.sol", "filename_short": "../../contracts/internals/gasRefundable.sol", "is_dependency": false, "lines": [35], "starting_column": 5, "ending_column": 88}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorVariables", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "GasProxy", "source_mapping": {"start": 897, "length": 1627, "filename_used": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_relative": "../../contracts/gasProxy.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/gasProxy.sol", "filename_short": "../../contracts/gasProxy.sol", "is_dependency": false, "lines": [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorVariables()"}}}}], "description": "GasProxy.slitherConstructorVariables() (../../contracts/gasProxy.sol#24-55) uses literals with too many digits:\n\t- _gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c) (../../contracts/internals/gasRefundable.sol#35)\n", "markdown": "[GasProxy.slitherConstructorVariables()](../../contracts/gasProxy.sol#L24-L55) uses literals with too many digits:\n\t- [_gasToken = IGasToken(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c)](../../contracts/internals/gasRefundable.sol#L35)\n", "id": "cc9926bb61499e4a85aaa6ca9e14c72e52ace88023d447419175ef3ba1f518d5", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}, {"elements": [{"type": "function", "name": "controllerNode", "source_mapping": {"start": 1813, "length": 95, "filename_used": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_relative": "../../contracts/internals/controllable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_short": "../../contracts/internals/controllable.sol", "is_dependency": false, "lines": [49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Controllable", "source_mapping": {"start": 1030, "length": 1770, "filename_used": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_relative": "../../contracts/internals/controllable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/controllable.sol", "filename_short": "../../contracts/internals/controllable.sol", "is_dependency": false, "lines": [28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72], "starting_column": 1, "ending_column": 2}}, "signature": "controllerNode()"}}], "description": "controllerNode() should be declared external:\n\t- Controllable.controllerNode() (../../contracts/internals/controllable.sol#49-51)\n", "markdown": "controllerNode() should be declared external:\n\t- [Controllable.controllerNode()](../../contracts/internals/controllable.sol#L49-L51)\n", "id": "d13a5d67fbaa6821edc17da5f446b38ce126b2b8abcbc3c21b79428186db1d29", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "ensRegistry", "source_mapping": {"start": 1600, "length": 89, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [40, 41, 42], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "ENSResolvable", "source_mapping": {"start": 1079, "length": 1226, "filename_used": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_relative": "../../contracts/internals/ensResolvable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ensResolvable.sol", "filename_short": "../../contracts/internals/ensResolvable.sol", "is_dependency": false, "lines": [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], "starting_column": 1, "ending_column": 2}}, "signature": "ensRegistry()"}}], "description": "ensRegistry() should be declared external:\n\t- ENSResolvable.ensRegistry() (../../contracts/internals/ensResolvable.sol#40-42)\n", "markdown": "ensRegistry() should be declared external:\n\t- [ENSResolvable.ensRegistry()](../../contracts/internals/ensResolvable.sol#L40-L42)\n", "id": "1afd905300be9ef64532aa1b05a1cfa9a93096242283226925905e9b9034d0cc", "check": "external-function", "impact": "Optimization", "confidence": "High"}, {"elements": [{"type": "function", "name": "owner", "source_mapping": {"start": 3543, "length": 85, "filename_used": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_relative": "../../contracts/internals/ownable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_short": "../../contracts/internals/ownable.sol", "is_dependency": false, "lines": [82, 83, 84], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "Ownable", "source_mapping": {"start": 1225, "length": 3110, "filename_used": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_relative": "../../contracts/internals/ownable.sol", "filename_absolute": "/contracts/tools/slither/../../contracts/internals/ownable.sol", "filename_short": "../../contracts/internals/ownable.sol", "is_dependency": false, "lines": [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102], "starting_column": 1, "ending_column": 2}}, "signature": "owner()"}}], "description": "owner() should be declared external:\n\t- Ownable.owner() (../../contracts/internals/ownable.sol#82-84)\n", "markdown": "owner() should be declared external:\n\t- [Ownable.owner()](../../contracts/internals/ownable.sol#L82-L84)\n", "id": "698811821ed34357d834c197b976565a1354eaff150bcbc8a352f2d8c7df57f3", "check": "external-function", "impact": "Optimization", "confidence": "High"}] \ No newline at end of file