From 68320d6b417da02ee3cc8c21157f217b7aecd7a1 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 12:46:40 +0900 Subject: [PATCH 01/18] Gateway methods --- .../src/abi/GatewayEVM.sol/GatewayEVM.json | 1 + .../src/abi/GatewayZEVM.sol/GatewayZEVM.json | 1 + packages/tasks/src/evmCall.ts | 78 ++++++++++++ packages/tasks/src/evmDeposit.ts | 100 +++++++++++++++ packages/tasks/src/evmDepositAndCall.ts | 117 ++++++++++++++++++ packages/tasks/src/index.ts | 5 + packages/tasks/src/zetachainCall.ts | 114 +++++++++++++++++ packages/tasks/src/zetachainWithdraw.ts | 116 +++++++++++++++++ 8 files changed, 532 insertions(+) create mode 100644 packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json create mode 100644 packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json create mode 100644 packages/tasks/src/evmCall.ts create mode 100644 packages/tasks/src/evmDeposit.ts create mode 100644 packages/tasks/src/evmDepositAndCall.ts create mode 100644 packages/tasks/src/zetachainCall.ts create mode 100644 packages/tasks/src/zetachainWithdraw.ts diff --git a/packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json b/packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json new file mode 100644 index 00000000..69f48b46 --- /dev/null +++ b/packages/tasks/src/abi/GatewayEVM.sol/GatewayEVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET_HANDLER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PAUSER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TSS_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"call","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"custody","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"asset","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"asset","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"function","name":"executeRevert","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeWithERC20","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"tssAddress_","type":"address","internalType":"address"},{"name":"zetaToken_","type":"address","internalType":"address"},{"name":"admin_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revertWithERC20","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setConnector","inputs":[{"name":"zetaConnector_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCustody","inputs":[{"name":"custody_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"tssAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"zetaConnector","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"zetaToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Called","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Deposited","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"asset","type":"address","indexed":false,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Executed","inputs":[{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ExecutedWithERC20","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Reverted","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertContext","type":"tuple","indexed":false,"internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ApprovalFailed","inputs":[]},{"type":"error","name":"ConnectorInitialized","inputs":[]},{"type":"error","name":"CustodyInitialized","inputs":[]},{"type":"error","name":"DepositFailed","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExecutionFailed","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InsufficientERC20Amount","inputs":[]},{"type":"error","name":"InsufficientETHAmount","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"NotWhitelistedInCustody","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516136f06100fd6000396000818161217a015281816121a3015261262f01526136f06000f3fe6080604052600436106101e35760003560e01c80635d62c86011610102578063ae7a3a6f11610095578063d547741f11610064578063d547741f1461062e578063dda79b751461064e578063e63ab1e91461066e578063f7ad60db146106a257600080fd5b8063ae7a3a6f146105ae578063c0c53b8b146105ce578063d09e3b78146105ee578063d0b492c31461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635d62c86014610448578063726ac97c1461047c578063744b9b8b1461048f5780638456cb59146104a257600080fd5b806336568abe1161017a57806352d1902d1161014957806352d1902d146103bc57806357bec62f146103d15780635b112591146103f15780635c975abb1461041157600080fd5b806336568abe146103545780633f4ba83a146103745780634f1ef286146103895780635131ab591461039c57600080fd5b80631cff79cd116101b65780631cff79cd1461027f57806321e093b11461029f578063248a9ca3146102d75780632f2ff15d1461033457600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f5780631becceb41461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b34801561026b57600080fd5b5061023d61027a366004612e61565b610955565b61029261028d366004612ec8565b6109ec565b6040516102149190612f89565b3480156102ab57600080fd5b506003546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102e357600080fd5b506103266102f2366004612f9c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561034057600080fd5b5061023d61034f366004612fb5565b610aef565b34801561036057600080fd5b5061023d61036f366004612fb5565b610b33565b34801561038057600080fd5b5061023d610b84565b61023d610397366004613010565b610bb9565b3480156103a857600080fd5b5061023d6103b7366004613117565b610bd8565b3480156103c857600080fd5b50610326610ef1565b3480156103dd57600080fd5b506002546102bf906001600160a01b031681565b3480156103fd57600080fd5b506001546102bf906001600160a01b031681565b34801561041d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045457600080fd5b506103267f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61048a366004613186565b610f20565b61023d61049d366004612e61565b6110b1565b3480156104ae57600080fd5b5061023d611246565b3480156104c357600080fd5b506102086104d2366004612fb5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610326600081565b34801561053d57600080fd5b506103267f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102926040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d7d565b611278565b3480156105da57600080fd5b5061023d6105e93660046131d4565b61136c565b3480156105fa57600080fd5b5061023d610609366004613217565b611621565b34801561061a57600080fd5b5061023d6106293660046132c1565b611732565b34801561063a57600080fd5b5061023d610649366004612fb5565b6118f4565b34801561065a57600080fd5b506000546102bf906001600160a01b031681565b34801561067a57600080fd5b506103267f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d6106b036600461334c565b611938565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b61095d611c30565b610965611c8e565b6001600160a01b0384166109a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e9392919061352d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a1881611b39565b610a20611c30565b610a28611c8e565b6001600160a01b038516610a68576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a75868686611f72565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610ab493929190613553565b60405180910390a29150610ae760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2981611b39565b61094f8383611b43565b6001600160a01b0381163314610b75576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bae81611b39565b610bb66120df565b50565b610bc161216f565b610bca8261223f565b610bd4828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c0281611b39565b610c0a611c30565b610c12611c8e565b83600003610c4c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c96868661236e565b610ccc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d58919061356d565b610d8e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d99858484611f72565b50610da4868661236e565b610dda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e919061358a565b90508015610e7057610e7087826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610eb793929190613553565b60405180910390a350610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610efb612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f28611c30565b610f30611c8e565b34600003610f6a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610faa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b5050905080611037576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161107f939291906134f7565b60405180910390a350610bd460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9611c30565b6110c1611c8e565b346000036110fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b50509050806111c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516112149594939291906135a3565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61127081611b39565b610bb6612686565b600061128381611b39565b6001600160a01b0382166112c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611306576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113b75750825b905060008267ffffffffffffffff1660011480156113d45750303b155b9050811580156113e2575080155b15611419576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561147a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061149757506001600160a01b038716155b156114ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d66126ff565b6114de612707565b6114e66126ff565b6114ee612717565b6114f9600087611b43565b506115247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115827f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116175784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611629611c30565b611631611c8e565b8460000361166b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b6338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516117019594939291906135a3565b60405180910390a3610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961175c81611b39565b611764611c30565b61176c611c8e565b846000036117a6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fa6001600160a01b0388168787612727565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de09061183f908590600401613644565b600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436878787876040516118ba9493929190613657565b60405180910390a36118eb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461192e81611b39565b61094f838361201b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61196281611b39565b61196a611c30565b611972611c8e565b6001600160a01b0385166119b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119ff576040519150601f19603f3d011682016040523d82523d6000602084013e611a04565b606091505b5050905080611a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a84908690600401613644565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611b009493929190613657565b60405180910390a350611b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bb6813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca919061356d565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af11580156118eb573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356d565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b7f906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f9292919061368e565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd481611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf9181019061358a565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610b7f83836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061356d565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061356d565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af1158015610ee9573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061356d565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd4906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610b7f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610bd4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610b7f8282612af6565b610bd4612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a919061356d565b155b15610b7f576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b13919061369e565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c81919061369e565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b60008060008060608587031215612e7757600080fd5b612e8085612d61565b9350602085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612edd57600080fd5b612ee684612d61565b9250602084013567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e18565b9497909650939450505050565b60005b83811015612f36578181015183820152602001612f1e565b50506000910152565b60008151808452612f57816020860160208601612f1b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612f3f565b600060208284031215612fae57600080fd5b5035919050565b60008060408385031215612fc857600080fd5b82359150612fd860208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561302357600080fd5b61302c83612d61565b9150602083013567ffffffffffffffff81111561304857600080fd5b8301601f8101851361305957600080fd5b803567ffffffffffffffff81111561307357613073612fe1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156130df576130df612fe1565b6040528181528282016020018710156130f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561312f57600080fd5b61313886612d61565b945061314660208701612d61565b935060408601359250606086013567ffffffffffffffff81111561316957600080fd5b61317588828901612e18565b969995985093965092949392505050565b6000806040838503121561319957600080fd5b6131a283612d61565b9150602083013567ffffffffffffffff8111156131be57600080fd5b6131ca85828601612d98565b9150509250929050565b6000806000606084860312156131e957600080fd5b6131f284612d61565b925061320060208501612d61565b915061320e60408501612d61565b90509250925092565b60008060008060008060a0878903121561323057600080fd5b61323987612d61565b95506020870135945061324e60408801612d61565b9350606087013567ffffffffffffffff81111561326a57600080fd5b61327689828a01612e18565b909450925050608087013567ffffffffffffffff81111561329657600080fd5b6132a289828a01612d98565b9150509295509295509295565b600060608284031215612daa57600080fd5b60008060008060008060a087890312156132da57600080fd5b6132e387612d61565b95506132f160208801612d61565b945060408701359350606087013567ffffffffffffffff81111561331457600080fd5b61332089828a01612e18565b909450925050608087013567ffffffffffffffff81111561334057600080fd5b6132a289828a016132af565b6000806000806060858703121561336257600080fd5b61336b85612d61565b9350602085013567ffffffffffffffff81111561338757600080fd5b61339387828801612e18565b909450925050604085013567ffffffffffffffff8111156133b357600080fd5b612e0c878288016132af565b8015158114610bb657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b604081526000613541604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561357f57600080fd5b8151612014816133bf565b60006020828403121561359c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006135cc608083018587613431565b82810360608401526135de818561347a565b98975050505050505050565b6001600160a01b036135fb82612d61565b1682526000602082013567ffffffffffffffff811680821461361c57600080fd5b60208501525061362f60408301836133cd565b60606040860152612b63606086018284613431565b60208152600061201460208301846135ea565b848152606060208201526000613671606083018587613431565b828103604084015261368381856135ea565b979650505050505050565b8183823760009101908152919050565b600082516136b0818460208701612f1b565b919091019291505056fea2646970667358221220c87250f92d4ce753add6a7cc4bdbc2e6885f5d3cad06fa9c00c5899f615d88ea64736f6c634300081a0033","sourceMap":"1053:13852:2:-:0;;;1171:4:42;1128:48;;2057:53:2;;;;;;;;;-1:-1:-1;2081:22:2;:20;:22::i;:::-;1053:13852;;7711:422:41;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:41;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:41;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:41;-1:-1:-1;;;;;8035:33:41;;;;;8087:29;;158:50:108;;;8087:29:41;;146:2:108;131:18;8087:29:41;;;;;;;7981:146;7760:373;7711:422::o;14:200:108:-;1053:13852:2;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101e35760003560e01c80635d62c86011610102578063ae7a3a6f11610095578063d547741f11610064578063d547741f1461062e578063dda79b751461064e578063e63ab1e91461066e578063f7ad60db146106a257600080fd5b8063ae7a3a6f146105ae578063c0c53b8b146105ce578063d09e3b78146105ee578063d0b492c31461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635d62c86014610448578063726ac97c1461047c578063744b9b8b1461048f5780638456cb59146104a257600080fd5b806336568abe1161017a57806352d1902d1161014957806352d1902d146103bc57806357bec62f146103d15780635b112591146103f15780635c975abb1461041157600080fd5b806336568abe146103545780633f4ba83a146103745780634f1ef286146103895780635131ab591461039c57600080fd5b80631cff79cd116101b65780631cff79cd1461027f57806321e093b11461029f578063248a9ca3146102d75780632f2ff15d1461033457600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f5780631becceb41461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b34801561026b57600080fd5b5061023d61027a366004612e61565b610955565b61029261028d366004612ec8565b6109ec565b6040516102149190612f89565b3480156102ab57600080fd5b506003546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102e357600080fd5b506103266102f2366004612f9c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561034057600080fd5b5061023d61034f366004612fb5565b610aef565b34801561036057600080fd5b5061023d61036f366004612fb5565b610b33565b34801561038057600080fd5b5061023d610b84565b61023d610397366004613010565b610bb9565b3480156103a857600080fd5b5061023d6103b7366004613117565b610bd8565b3480156103c857600080fd5b50610326610ef1565b3480156103dd57600080fd5b506002546102bf906001600160a01b031681565b3480156103fd57600080fd5b506001546102bf906001600160a01b031681565b34801561041d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045457600080fd5b506103267f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61048a366004613186565b610f20565b61023d61049d366004612e61565b6110b1565b3480156104ae57600080fd5b5061023d611246565b3480156104c357600080fd5b506102086104d2366004612fb5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610326600081565b34801561053d57600080fd5b506103267f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102926040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d7d565b611278565b3480156105da57600080fd5b5061023d6105e93660046131d4565b61136c565b3480156105fa57600080fd5b5061023d610609366004613217565b611621565b34801561061a57600080fd5b5061023d6106293660046132c1565b611732565b34801561063a57600080fd5b5061023d610649366004612fb5565b6118f4565b34801561065a57600080fd5b506000546102bf906001600160a01b031681565b34801561067a57600080fd5b506103267f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d6106b036600461334c565b611938565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b61095d611c30565b610965611c8e565b6001600160a01b0384166109a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e9392919061352d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a1881611b39565b610a20611c30565b610a28611c8e565b6001600160a01b038516610a68576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a75868686611f72565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610ab493929190613553565b60405180910390a29150610ae760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2981611b39565b61094f8383611b43565b6001600160a01b0381163314610b75576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bae81611b39565b610bb66120df565b50565b610bc161216f565b610bca8261223f565b610bd4828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c0281611b39565b610c0a611c30565b610c12611c8e565b83600003610c4c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c96868661236e565b610ccc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d58919061356d565b610d8e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d99858484611f72565b50610da4868661236e565b610dda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e919061358a565b90508015610e7057610e7087826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610eb793929190613553565b60405180910390a350610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610efb612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f28611c30565b610f30611c8e565b34600003610f6a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610faa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b5050905080611037576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161107f939291906134f7565b60405180910390a350610bd460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9611c30565b6110c1611c8e565b346000036110fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b50509050806111c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516112149594939291906135a3565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61127081611b39565b610bb6612686565b600061128381611b39565b6001600160a01b0382166112c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611306576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113b75750825b905060008267ffffffffffffffff1660011480156113d45750303b155b9050811580156113e2575080155b15611419576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561147a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061149757506001600160a01b038716155b156114ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d66126ff565b6114de612707565b6114e66126ff565b6114ee612717565b6114f9600087611b43565b506115247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115827f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116175784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611629611c30565b611631611c8e565b8460000361166b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b6338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516117019594939291906135a3565b60405180910390a3610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961175c81611b39565b611764611c30565b61176c611c8e565b846000036117a6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fa6001600160a01b0388168787612727565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de09061183f908590600401613644565b600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436878787876040516118ba9493929190613657565b60405180910390a36118eb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461192e81611b39565b61094f838361201b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61196281611b39565b61196a611c30565b611972611c8e565b6001600160a01b0385166119b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119ff576040519150601f19603f3d011682016040523d82523d6000602084013e611a04565b606091505b5050905080611a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a84908690600401613644565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611b009493929190613657565b60405180910390a350611b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bb6813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca919061356d565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af11580156118eb573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356d565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b7f906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f9292919061368e565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd481611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf9181019061358a565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610b7f83836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061356d565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061356d565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af1158015610ee9573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061356d565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd4906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610b7f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610bd4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610b7f8282612af6565b610bd4612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a919061356d565b155b15610b7f576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b13919061369e565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c81919061369e565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b60008060008060608587031215612e7757600080fd5b612e8085612d61565b9350602085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612edd57600080fd5b612ee684612d61565b9250602084013567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e18565b9497909650939450505050565b60005b83811015612f36578181015183820152602001612f1e565b50506000910152565b60008151808452612f57816020860160208601612f1b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612f3f565b600060208284031215612fae57600080fd5b5035919050565b60008060408385031215612fc857600080fd5b82359150612fd860208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561302357600080fd5b61302c83612d61565b9150602083013567ffffffffffffffff81111561304857600080fd5b8301601f8101851361305957600080fd5b803567ffffffffffffffff81111561307357613073612fe1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156130df576130df612fe1565b6040528181528282016020018710156130f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561312f57600080fd5b61313886612d61565b945061314660208701612d61565b935060408601359250606086013567ffffffffffffffff81111561316957600080fd5b61317588828901612e18565b969995985093965092949392505050565b6000806040838503121561319957600080fd5b6131a283612d61565b9150602083013567ffffffffffffffff8111156131be57600080fd5b6131ca85828601612d98565b9150509250929050565b6000806000606084860312156131e957600080fd5b6131f284612d61565b925061320060208501612d61565b915061320e60408501612d61565b90509250925092565b60008060008060008060a0878903121561323057600080fd5b61323987612d61565b95506020870135945061324e60408801612d61565b9350606087013567ffffffffffffffff81111561326a57600080fd5b61327689828a01612e18565b909450925050608087013567ffffffffffffffff81111561329657600080fd5b6132a289828a01612d98565b9150509295509295509295565b600060608284031215612daa57600080fd5b60008060008060008060a087890312156132da57600080fd5b6132e387612d61565b95506132f160208801612d61565b945060408701359350606087013567ffffffffffffffff81111561331457600080fd5b61332089828a01612e18565b909450925050608087013567ffffffffffffffff81111561334057600080fd5b6132a289828a016132af565b6000806000806060858703121561336257600080fd5b61336b85612d61565b9350602085013567ffffffffffffffff81111561338757600080fd5b61339387828801612e18565b909450925050604085013567ffffffffffffffff8111156133b357600080fd5b612e0c878288016132af565b8015158114610bb657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b604081526000613541604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561357f57600080fd5b8151612014816133bf565b60006020828403121561359c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006135cc608083018587613431565b82810360608401526135de818561347a565b98975050505050505050565b6001600160a01b036135fb82612d61565b1682526000602082013567ffffffffffffffff811680821461361c57600080fd5b60208501525061362f60408301836133cd565b60606040860152612b63606086018284613431565b60208152600061201460208301846135ea565b848152606060208201526000613671606083018587613431565b828103604084015261368381856135ea565b979650505050505050565b8183823760009101908152919050565b600082516136b0818460208701612f1b565b919091019291505056fea2646970667358221220c87250f92d4ce753add6a7cc4bdbc2e6885f5d3cad06fa9c00c5899f615d88ea64736f6c634300081a0033","sourceMap":"1053:13852:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:40;;;;;;;;;;-1:-1:-1;3443:202:40;;;;;:::i;:::-;;:::i;:::-;;;516:14:108;;509:22;491:41;;479:2;464:18;3443:202:40;;;;;;;;12007:324:2;;;;;;;;;;-1:-1:-1;12007:324:2;;;;;:::i;:::-;;:::i;:::-;;8785:475;;;;;;;;;;-1:-1:-1;8785:475:2;;;;;:::i;:::-;;:::i;11165:320::-;;;;;;;;;;-1:-1:-1;11165:320:2;;;;;:::i;:::-;;:::i;4952:424::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1597:24::-;;;;;;;;;;-1:-1:-1;1597:24:2;;;;-1:-1:-1;;;;;1597:24:2;;;;;;-1:-1:-1;;;;;4299:55:108;;;4281:74;;4269:2;4254:18;1597:24:2;4135:226:108;4759:191:40;;;;;;;;;;-1:-1:-1;4759:191:40;;;;;:::i;:::-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;;4759:191;;;;4743:25:108;;;4731:2;4716:18;4759:191:40;4597:177:108;5246:136:40;;;;;;;;;;-1:-1:-1;5246:136:40;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:40;;;;;:::i;:::-;;:::i;3731:77:2:-;;;;;;;;;;;;;:::i;4158:214:42:-;;;;;;:::i;:::-;;:::i;5834:1032:2:-;;;;;;;;;;-1:-1:-1;5834:1032:2;;;;;:::i;:::-;;:::i;3705:134:42:-;;;;;;;;;;;;;:::i;1507:28:2:-;;;;;;;;;;-1:-1:-1;1507:28:2;;;;-1:-1:-1;;;;;1507:28:2;;;1417:25;;;;;;;;;;-1:-1:-1;1417:25:2;;;;-1:-1:-1;;;;;1417:25:2;;;2692:145:44;;;;;;;;;;-1:-1:-1;1270:23:44;2821:9;;;2692:145;;1800:76:2;;;;;;;;;;;;1845:31;1800:76;;8001:508;;;;;;:::i;:::-;;:::i;9500:552::-;;;;;;:::i;:::-;;:::i;3618:73::-;;;;;;;;;;;;;:::i;3732:207:40:-;;;;;;;;;;-1:-1:-1;3732:207:40;;;;;:::i;:::-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;;;;3732:207;2317:49;;;;;;;;;;-1:-1:-1;2317:49:40;2362:4;2317:49;;1678:56:2;;;;;;;;;;;;1713:21;1678:56;;1819:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11599:284:2;;;;;;;;;;-1:-1:-1;11599:284:2;;;;;:::i;:::-;;:::i;2308:543::-;;;;;;;;;;-1:-1:-1;2308:543:2;;;;;:::i;:::-;;:::i;10419:519::-;;;;;;;;;;-1:-1:-1;10419:519:2;;;;;:::i;:::-;;:::i;7290:562::-;;;;;;;;;;-1:-1:-1;7290:562:2;;;;;:::i;:::-;;:::i;5662:138:40:-;;;;;;;;;;-1:-1:-1;5662:138:40;;;;;:::i;:::-;;:::i;1311:22:2:-;;;;;;;;;;-1:-1:-1;1311:22:2;;;;-1:-1:-1;;;;;1311:22:2;;;1935:62;;;;;;;;;;;;1973:24;1935:62;;4089:560;;;;;;:::i;:::-;;:::i;3443:202:40:-;3528:4;3551:47;;;3566:32;3551:47;;:87;;-1:-1:-1;1148:25:46;1133:40;;;;3602:36:40;3544:94;3443:202;-1:-1:-1;;3443:202:40:o;12007:324:2:-;2362:4:40;3191:16;2362:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;12105:28:2;::::1;12101:54;;12142:13;;;;;;;;;;;;;;12101:54;12169:13;::::0;-1:-1:-1;;;;;12169:13:2::1;:27:::0;12165:62:::1;;12205:22;;;;;;;;;;;;;;12165:62;12238:46;1845:31;12269:14;12238:10;:46::i;:::-;-1:-1:-1::0;;12294:13:2::1;:30:::0;;;::::1;-1:-1:-1::0;;;;;12294:30:2;;;::::1;::::0;;;::::1;::::0;;12007:324::o;8785:475::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;9005:6:2::2;9015:1;9005:11:::0;9001:49:::2;;9025:25;;;;;;;;;;;;;;9001:49;-1:-1:-1::0;;;;;9064:22:2;::::2;9060:48;;9095:13;;;;;;;;;;;;;;9060:48;9119:53;9146:10;9158:5;9165:6;9119:26;:53::i;:::-;9210:8;-1:-1:-1::0;;;;;9188:65:2::2;9198:10;-1:-1:-1::0;;;;;9188:65:2::2;;9220:6;9228:5;9239:13;9188:65;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::1;8785:475:2::0;;;;:::o;11165:320::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;11367:22:2;::::2;11363:48;;11398:13;;;;;;;;;;;;;;11363:48;11445:8;-1:-1:-1::0;;;;;11426:52:2::2;11433:10;-1:-1:-1::0;;;;;11426:52:2::2;;11455:7;;11464:13;11426:52;;;;;;;;:::i;4952:424::-:0;5153:12;1713:21;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;-1:-1:-1::0;;;;;5185:25:2;::::3;5181:51;;5219:13;;;;;;;;;;;;;;5181:51;5242:19;5264:27;5273:11;5286:4;;5264:8;:27::i;:::-;5242:49;;5316:11;-1:-1:-1::0;;;;;5307:38:2::3;;5329:9;5340:4;;5307:38;;;;;;;;:::i;:::-;;;;;;;;5363:6:::0;-1:-1:-1;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;4952:424:2::0;;;;;;:::o;5246:136:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;6348:245::-:0;-1:-1:-1;;;;;6441:34:40;;966:10:43;6441:34:40;6437:102;;6498:30;;;;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;3731:77:2:-;1973:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3791:10:2::1;:8;:10::i;:::-;3731:77:::0;:::o;4158:214:42:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;5834:1032:2:-;1845:31;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;6075:6:2::3;6085:1;6075:11:::0;6071:49:::3;;6095:25;;;;;;;;;;;;;;6071:49;-1:-1:-1::0;;;;;6134:16:2;::::3;6130:42;;6159:13;;;;;;;;;;;;;;6130:42;6246:24;6260:5;6267:2;6246:13;:24::i;:::-;6241:54;;6279:16;;;;;;;;;;;;;;6241:54;6310:33;::::0;;;;-1:-1:-1;;;;;14361:55:108;;;6310:33:2::3;::::0;::::3;14343:74:108::0;14433:18;;;14426:34;;;6310:21:2;::::3;::::0;::::3;::::0;14316:18:108;;6310:33:2::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6305:63;;6352:16;;;;;;;;;;;;;;6305:63;6429:18;6438:2;6442:4;;6429:8;:18::i;:::-;;6489:24;6503:5;6510:2;6489:13;:24::i;:::-;6484:54;;6522:16;;;;;;;;;;;;;;6484:54;6656:38;::::0;;;;6688:4:::3;6656:38;::::0;::::3;4281:74:108::0;6629:24:2::3;::::0;-1:-1:-1;;;;;6656:23:2;::::3;::::0;::::3;::::0;4254:18:108;;6656:38:2::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6629:65:::0;-1:-1:-1;6708:20:2;;6704:98:::3;;6744:47;6767:5;6774:16;6744:22;:47::i;:::-;6842:2;-1:-1:-1::0;;;;;6817:42:2::3;6835:5;-1:-1:-1::0;;;;;6817:42:2::3;;6846:6;6854:4;;6817:42;;;;;;;;:::i;:::-;;;;;;;;6061:805;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;5834:1032:2::0;;;;;;:::o;3705:134:42:-;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;1327:66:54::1;3705:134:42::0;:::o;8001:508:2:-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;8190:9:2::2;8203:1;8190:14:::0;8186:50:::2;;8213:23;;;;;;;;;;;;;;8186:50;-1:-1:-1::0;;;;;8250:22:2;::::2;8246:48;;8281:13;;;;;;;;;;;;;;8246:48;8325:10;::::0;:39:::2;::::0;8306:14:::2;::::0;-1:-1:-1;;;;;8325:10:2::2;::::0;8349:9:::2;::::0;8306:14;8325:39;8306:14;8325:39;8349:9;8325:10;:39:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:59;;;8380:9;8375:38;;8398:15;;;;;;;;;;;;;;8375:38;8451:8;-1:-1:-1::0;;;;;8429:73:2::2;8439:10;-1:-1:-1::0;;;;;8429:73:2::2;;8461:9;8480:1;8488:13;8429:73;;;;;;;;:::i;:::-;;;;;;;;8176:333;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;9500:552:2;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;9728:9:2::2;9741:1;9728:14:::0;9724:50:::2;;9751:23;;;;;;;;;;;;;;9724:50;-1:-1:-1::0;;;;;9788:22:2;::::2;9784:48;;9819:13;;;;;;;;;;;;;;9784:48;9863:10;::::0;:39:::2;::::0;9844:14:::2;::::0;-1:-1:-1;;;;;9863:10:2::2;::::0;9887:9:::2;::::0;9844:14;9863:39;9844:14;9863:39;9887:9;9863:10;:39:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9843:59;;;9918:9;9913:38;;9936:15;;;;;;;;;;;;;;9913:38;9989:8;-1:-1:-1::0;;;;;9967:78:2::2;9977:10;-1:-1:-1::0;;;;;9967:78:2::2;;9999:9;10018:1;10022:7;;10031:13;9967:78;;;;;;;;;;:::i;:::-;;;;;;;;9714:338;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;3618:73:2;1973:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3676:8:2::1;:6;:8::i;11599:284::-:0;2362:4:40;3191:16;2362:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;11689:22:2;::::1;11685:48;;11720:13;;;;;;;;;;;;;;11685:48;11766:1;11747:7:::0;-1:-1:-1;;;;;11747:7:2::1;:21:::0;11743:54:::1;;11777:20;;;;;;;;;;;;;;11743:54;11808:40;1845:31;11839:8;11808:10;:40::i;:::-;-1:-1:-1::0;;11858:7:2::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;11858:18:2;;;::::1;::::0;;;::::1;::::0;;11599:284::o;2308:543::-;8870:21:41;4302:15;;;;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:41;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4951:18;;;;4968:1;4951:18;;;4979:67;;;;5013:22;;;;;;;;4979:67;-1:-1:-1;;;;;2418:25:2;::::1;::::0;;:53:::1;;-1:-1:-1::0;;;;;;2447:24:2;::::1;::::0;2418:53:::1;2414:104;;;2494:13;;;;;;;;;;;;;;2414:104;2527:24;:22;:24::i;:::-;2561;:22;:24::i;:::-;2595:22;:20;:22::i;:::-;2627:17;:15;:17::i;:::-;2655:38;2362:4:40;2686:6:2::0;2655:10:::1;:38::i;:::-;;2703:31;1973:24;2727:6;2703:10;:31::i;:::-;-1:-1:-1::0;2744:10:2::1;:24:::0;;;::::1;-1:-1:-1::0;;;;;2744:24:2;::::1;;::::0;;2778:33:::1;1713:21;2744:24:::0;2778:10:::1;:33::i;:::-;-1:-1:-1::0;2822:9:2::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;2822:22:2;::::1;;::::0;;5066:101:41;;;;5100:23;;;;;;5142:14;;-1:-1:-1;15941:50:108;;5142:14:41;;15929:2:108;15914:18;5142:14:41;;;;;;;5066:101;4092:1081;;;;;2308:543:2;;;:::o;10419:519::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;10678:6:2::2;10688:1;10678:11:::0;10674:49:::2;;10698:25;;;;;;;;;;;;;;10674:49;-1:-1:-1::0;;;;;10737:22:2;::::2;10733:48;;10768:13;;;;;;;;;;;;;;10733:48;10792:53;10819:10;10831:5;10838:6;10792:26;:53::i;:::-;10883:8;-1:-1:-1::0;;;;;10861:70:2::2;10871:10;-1:-1:-1::0;;;;;10861:70:2::2;;10893:6;10901:5;10908:7;;10917:13;10861:70;;;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;7290:562:2;1845:31;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;7578:6:2::3;7588:1;7578:11:::0;7574:49:::3;;7598:25;;;;;;;;;;;;;;7574:49;-1:-1:-1::0;;;;;7637:16:2;::::3;7633:42;;7662:13;;;;;;;;;;;;;;7633:42;7686:47;-1:-1:-1::0;;;;;7686:26:2;::::3;7721:2:::0;7726:6;7686:26:::3;:47::i;:::-;7743:38;::::0;;;;-1:-1:-1;;;;;7743:23:2;::::3;::::0;::::3;::::0;:38:::3;::::0;7767:13;;7743:38:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;7810:5;-1:-1:-1::0;;;;;7797:48:2::3;7806:2;-1:-1:-1::0;;;;;7797:48:2::3;;7817:6;7825:4;;7831:13;7797:48;;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;7290:562:2::0;;;;;;;:::o;5662:138:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;4089:560:2:-:0;1713:21;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;-1:-1:-1::0;;;;;4341:25:2;::::3;4337:51;;4375:13;;;;;;;;;;;;;;4337:51;4399:12;4416:11;-1:-1:-1::0;;;;;4416:16:2::3;4441:9;4416:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4398:58;;;4471:7;4466:38;;4487:17;;;;;;;;;;;;;;4466:38;4514:47;::::0;;;;-1:-1:-1;;;;;4514:32:2;::::3;::::0;::::3;::::0;:47:::3;::::0;4547:13;;4514:47:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;4607:1;-1:-1:-1::0;;;;;4577:65:2::3;4586:11;-1:-1:-1::0;;;;;4577:65:2::3;;4611:9;4622:4;;4628:13;4577:65;;;;;;;;;:::i;:::-;;;;;;;;4327:322;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;4089:560:2::0;;;;;:::o;4148:103:40:-;4214:30;4225:4;966:10:43;4214::40;:30::i;7270:387::-;7347:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:40;;;;;;;;;:38;;;;7509:4;7475:38;;;7559:12;966:10:43;;887:96;7559:12:40;-1:-1:-1;;;;;7532:40:40;7550:7;-1:-1:-1;;;;;7532:40:40;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;2905:128:44;1270:23;2821:9;;;2966:61;;;3001:15;;;;;;;;;;;;;;2966:61;2905:128::o;3326:384:45:-;2388:30;3526:9;;:20;;3522:88;;3569:30;;;;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;13155:801:2:-;13267:9;;-1:-1:-1;;;;;13267:9:2;;;13258:18;;;;13254:696;;13371:59;-1:-1:-1;;;;;13371:30:2;;13402:4;13416;13423:6;13371:30;:59::i;:::-;13571:13;;13549:44;;;;;-1:-1:-1;;;;;13571:13:2;;;13549:44;;;14343:74:108;14433:18;;;14426:34;;;13549:21:2;;;;;;14316:18:108;;13549:44:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13544:74;;13602:16;;;;;;;;;;;;;;13544:74;13690:13;;13672:54;;;;;;;;4743:25:108;;;-1:-1:-1;;;;;13690:13:2;;;;13672:46;;4716:18:108;;13672:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13254:696;13811:7;;13797:41;;;;;-1:-1:-1;;;;;4299:55:108;;;13797:41:2;;;4281:74:108;13811:7:2;;;;13797:34;;4254:18:108;;13797:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13792:80;;13847:25;;;;;;;;;;;;;;13792:80;13923:7;;13886:53;;-1:-1:-1;;;;;13886:30:2;;;;13917:4;;13923:7;13932:6;13886:30;:53::i;3716:283:45:-;1805:1;2388:30;3969:23;3716:283::o;3319:261:2:-;3397:12;3422;3436:19;3459:11;-1:-1:-1;;;;;3459:16:2;3484:9;3496:4;;3459:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3421:80;;;;3516:7;3511:38;;3532:17;;;;;;;;;;;;;;3511:38;3567:6;-1:-1:-1;;3319:261:2;;;;;;:::o;7892:388:40:-;7970:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:40;;;;;;;;;;:39;;;;;;8155:40;966:10:43;;8097:14:40;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;3674:178:44;2563:16;:14;:16::i;:::-;1270:23;3791:17;;;::::1;::::0;;3823:22:::1;966:10:43::0;3832:12:44::1;3823:22;::::0;-1:-1:-1;;;;;4299:55:108;;;4281:74;;4269:2;4254:18;3823:22:44::1;;;;;;;3722:130;3674:178::o:0;4599:312:42:-;4679:4;-1:-1:-1;;;;;4688:6:42;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:42;:32;1327:66:54;2035:53;-1:-1:-1;;;;;2035:53:54;;1957:138;4749:32:42;-1:-1:-1;;;;;4749:42:42;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;3000:104:2;2362:4:40;3191:16;2362:4;3191:10;:16::i;6052:538:42:-;6169:17;-1:-1:-1;;;;;6151:50:42;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:42;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;;;;-1:-1:-1;;;;;4299:55:108;;6513:60:42;;;4281:74:108;4254:18;;6513:60:42;;;;;;;;6147:437;1327:66:54;6245:40:42;;6241:120;;6312:34;;;;;;;;4743:25:108;;;4716:18;;6312:34:42;4597:177:108;6241:120:42;6374:54;6404:17;6423:4;6374:29;:54::i;12682:125:2:-;12772:28;;;;;-1:-1:-1;;;;;14361:55:108;;;12772:28:2;;;14343:74:108;12749:4:2;14433:18:108;;;14426:34;;;12749:4:2;12772:21;;;;;;14316:18:108;;12772:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14245:658::-;14339:9;;-1:-1:-1;;;;;14339:9:2;;;14330:18;;;;14326:571;;14528:13;;14506:44;;;;;-1:-1:-1;;;;;14528:13:2;;;14506:44;;;14343:74:108;14433:18;;;14426:34;;;14506:21:2;;;;;;14316:18:108;;14506:44:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14501:74;;14559:16;;;;;;;;;;;;;;14501:74;14647:13;;14629:54;;;;;;;;4743:25:108;;;-1:-1:-1;;;;;14647:13:2;;;;14629:46;;4716:18:108;;14629:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14326:571;14768:7;;14754:41;;;;;-1:-1:-1;;;;;4299:55:108;;;14754:41:2;;;4281:74:108;14768:7:2;;;;14754:34;;4254:18:108;;14754:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14749:80;;14804:25;;;;;;;;;;;;;;14749:80;14870:7;;14843:43;;-1:-1:-1;;;;;14843:26:2;;;;14870:7;14879:6;14843:26;:43::i;5028:213:42:-;5102:4;-1:-1:-1;;;;;5111:6:42;5094:23;;5090:145;;5195:29;;;;;;;;;;;;;;3366:176:44;2316:19;:17;:19::i;:::-;1270:23;3484:16;;;::::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:43::0;3522:12:44::1;887:96:43::0;2968:67:42;6931:20:41;:18;:20::i;2540:111:45:-;6931:20:41;:18;:20::i;:::-;2610:34:45::1;:32;:34::i;1836:97:44:-:0;6931:20:41;:18;:20::i;:::-;1899:27:44::1;:25;:27::i;1303:160:66:-:0;1412:43;;-1:-1:-1;;;;;14361:55:108;;;1412:43:66;;;14343:74:108;14433:18;;;14426:34;;;1385:71:66;;1405:5;;1427:14;;;;;14316:18:108;;1412:43:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:19;:71::i;4381:197:40:-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;4464:108;;4514:47;;;;;-1:-1:-1;;;;;14361:55:108;;4514:47:40;;;14343:74:108;14433:18;;;14426:34;;;14316:18;;4514:47:40;14169:297:108;1702:188:66;1829:53;;-1:-1:-1;;;;;18908:55:108;;;1829:53:66;;;18890:74:108;19000:55;;;18980:18;;;18973:83;19072:18;;;19065:34;;;1802:81:66;;1822:5;;1844:18;;;;;18863::108;;1829:53:66;18688:417:108;3105:126:44;1270:23;2821:9;;;3163:62;;3199:15;;;;;;;;;;;;;;2779:335:54;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:54;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:41:-;8870:21;8560:40;;;;;;7146:73;;7191:17;;;;;;;;;;;;;;2657:183:45;6931:20:41;:18;:20::i;1939:156:44:-;6931:20:41;:18;:20::i;:::-;1270:23:44;2071:17;;;::::1;::::0;;1939:156::o;4059:629:66:-;4478:23;4504:33;-1:-1:-1;;;;;4504:27:66;;4532:4;4504:27;:33::i;:::-;4478:59;;4551:10;:17;4572:1;4551:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4631:40;;;;;-1:-1:-1;;;;;4299:55:108;;4631:40:66;;;4281:74:108;4254:18;;4631:40:66;4135:226:108;2186:281:54;2263:17;-1:-1:-1;;;;;2263:29:54;;2296:1;2263:34;2259:119;;2320:47;;;;;-1:-1:-1;;;;;4299:55:108;;2320:47:54;;;4281:74:108;4254:18;;2320:47:54;4135:226:108;2259:119:54;1327:66;2387:73;;;;-1:-1:-1;;;;;2387:73:54;;;;;;;;;;2186:281::o;4106:253:67:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:67;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:67:o;6598:122:54:-;6648:9;:13;6644:70;;6684:19;;;;;;;;;;;;;;2705:151:67;2780:12;2811:38;2833:6;2841:4;2847:1;2811:21;:38::i;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:67;;;:23;5045:49;5041:119;;;5121:24;;;;;-1:-1:-1;;;;;4299:55:108;;5121:24:67;;;4281:74:108;4254:18;;5121:24:67;4135:226:108;5041:119:67;-1:-1:-1;5180:10:67;5173:17;;3180:392;3279:12;3331:5;3307:21;:29;3303:108;;;3359:41;;;;;3394:4;3359:41;;;4281:74:108;4254:18;;3359:41:67;4135:226:108;3303:108:67;3421:12;3435:23;3462:6;-1:-1:-1;;;;;3462:11:67;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;3180:392;-1:-1:-1;;;;;;3180:392:67:o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:108;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;-1:-1:-1;;;;;660:54:108;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:186::-;803:6;856:2;844:9;835:7;831:23;827:32;824:52;;;872:1;869;862:12;824:52;895:29;914:9;895:29;:::i;935:162::-;1001:5;1046:3;1037:6;1032:3;1028:16;1024:26;1021:46;;;1063:1;1060;1053:12;1021:46;-1:-1:-1;1085:6:108;935:162;-1:-1:-1;935:162:108:o;1102:629::-;1219:6;1227;1235;1243;1296:3;1284:9;1275:7;1271:23;1267:33;1264:53;;;1313:1;1310;1303:12;1264:53;1336:29;1355:9;1336:29;:::i;:::-;1326:39;-1:-1:-1;1434:2:108;1419:18;;1406:32;;-1:-1:-1;1481:38:108;1515:2;1500:18;;1481:38;:::i;:::-;1471:48;;1570:2;1559:9;1555:18;1542:32;1597:18;1589:6;1586:30;1583:50;;;1629:1;1626;1619:12;1583:50;1652:73;1717:7;1708:6;1697:9;1693:22;1652:73;:::i;:::-;1642:83;;;1102:629;;;;;;;:::o;1736:347::-;1787:8;1797:6;1851:3;1844:4;1836:6;1832:17;1828:27;1818:55;;1869:1;1866;1859:12;1818:55;-1:-1:-1;1892:20:108;;1935:18;1924:30;;1921:50;;;1967:1;1964;1957:12;1921:50;2004:4;1996:6;1992:17;1980:29;;2056:3;2049:4;2040:6;2032;2028:19;2024:30;2021:39;2018:59;;;2073:1;2070;2063:12;2018:59;1736:347;;;;;:::o;2088:743::-;2207:6;2215;2223;2231;2284:2;2272:9;2263:7;2259:23;2255:32;2252:52;;;2300:1;2297;2290:12;2252:52;2323:29;2342:9;2323:29;:::i;:::-;2313:39;;2403:2;2392:9;2388:18;2375:32;2430:18;2422:6;2419:30;2416:50;;;2462:1;2459;2452:12;2416:50;2501:58;2551:7;2542:6;2531:9;2527:22;2501:58;:::i;:::-;2578:8;;-1:-1:-1;2475:84:108;-1:-1:-1;;2666:2:108;2651:18;;2638:32;2695:18;2682:32;;2679:52;;;2727:1;2724;2717:12;2836:483;2915:6;2923;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3023:29;3042:9;3023:29;:::i;:::-;3013:39;;3103:2;3092:9;3088:18;3075:32;3130:18;3122:6;3119:30;3116:50;;;3162:1;3159;3152:12;3116:50;3201:58;3251:7;3242:6;3231:9;3227:22;3201:58;:::i;:::-;2836:483;;3278:8;;-1:-1:-1;3175:84:108;;-1:-1:-1;;;;2836:483:108:o;3324:250::-;3409:1;3419:113;3433:6;3430:1;3427:13;3419:113;;;3509:11;;;3503:18;3490:11;;;3483:39;3455:2;3448:10;3419:113;;;-1:-1:-1;;3566:1:108;3548:16;;3541:27;3324:250::o;3579:329::-;3620:3;3658:5;3652:12;3685:6;3680:3;3673:19;3701:76;3770:6;3763:4;3758:3;3754:14;3747:4;3740:5;3736:16;3701:76;:::i;:::-;3822:2;3810:15;3827:66;3806:88;3797:98;;;;3897:4;3793:109;;3579:329;-1:-1:-1;;3579:329:108:o;3913:217::-;4060:2;4049:9;4042:21;4023:4;4080:44;4120:2;4109:9;4105:18;4097:6;4080:44;:::i;4366:226::-;4425:6;4478:2;4466:9;4457:7;4453:23;4449:32;4446:52;;;4494:1;4491;4484:12;4446:52;-1:-1:-1;4539:23:108;;4366:226;-1:-1:-1;4366:226:108:o;4779:300::-;4847:6;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4969:23;;;-1:-1:-1;5035:38:108;5069:2;5054:18;;5035:38;:::i;:::-;5025:48;;4779:300;;;;;:::o;5084:184::-;5136:77;5133:1;5126:88;5233:4;5230:1;5223:15;5257:4;5254:1;5247:15;5273:1136;5350:6;5358;5411:2;5399:9;5390:7;5386:23;5382:32;5379:52;;;5427:1;5424;5417:12;5379:52;5450:29;5469:9;5450:29;:::i;:::-;5440:39;;5530:2;5519:9;5515:18;5502:32;5557:18;5549:6;5546:30;5543:50;;;5589:1;5586;5579:12;5543:50;5612:22;;5665:4;5657:13;;5653:27;-1:-1:-1;5643:55:108;;5694:1;5691;5684:12;5643:55;5734:2;5721:16;5760:18;5752:6;5749:30;5746:56;;;5782:18;;:::i;:::-;5831:2;5825:9;5978:66;5973:2;5904:66;5897:4;5889:6;5885:17;5881:90;5877:99;5873:172;5865:6;5861:185;6112:6;6100:10;6097:22;6076:18;6064:10;6061:34;6058:62;6055:88;;;6123:18;;:::i;:::-;6159:2;6152:22;6183;;;6224:15;;;6241:2;6220:24;6217:37;-1:-1:-1;6214:57:108;;;6267:1;6264;6257:12;6214:57;6323:6;6318:2;6314;6310:11;6305:2;6297:6;6293:15;6280:50;6376:1;6371:2;6362:6;6354;6350:19;6346:28;6339:39;6397:6;6387:16;;;;;5273:1136;;;;;:::o;6414:672::-;6511:6;6519;6527;6535;6543;6596:3;6584:9;6575:7;6571:23;6567:33;6564:53;;;6613:1;6610;6603:12;6564:53;6636:29;6655:9;6636:29;:::i;:::-;6626:39;;6684:38;6718:2;6707:9;6703:18;6684:38;:::i;:::-;6674:48;-1:-1:-1;6791:2:108;6776:18;;6763:32;;-1:-1:-1;6870:2:108;6855:18;;6842:32;6897:18;6886:30;;6883:50;;;6929:1;6926;6919:12;6883:50;6968:58;7018:7;7009:6;6998:9;6994:22;6968:58;:::i;:::-;6414:672;;;;-1:-1:-1;6414:672:108;;-1:-1:-1;7045:8:108;;6942:84;6414:672;-1:-1:-1;;;6414:672:108:o;7091:440::-;7190:6;7198;7251:2;7239:9;7230:7;7226:23;7222:32;7219:52;;;7267:1;7264;7257:12;7219:52;7290:29;7309:9;7290:29;:::i;:::-;7280:39;;7370:2;7359:9;7355:18;7342:32;7397:18;7389:6;7386:30;7383:50;;;7429:1;7426;7419:12;7383:50;7452:73;7517:7;7508:6;7497:9;7493:22;7452:73;:::i;:::-;7442:83;;;7091:440;;;;;:::o;7760:334::-;7837:6;7845;7853;7906:2;7894:9;7885:7;7881:23;7877:32;7874:52;;;7922:1;7919;7912:12;7874:52;7945:29;7964:9;7945:29;:::i;:::-;7935:39;;7993:38;8027:2;8016:9;8012:18;7993:38;:::i;:::-;7983:48;;8050:38;8084:2;8073:9;8069:18;8050:38;:::i;:::-;8040:48;;7760:334;;;;;:::o;8099:933::-;8236:6;8244;8252;8260;8268;8276;8329:3;8317:9;8308:7;8304:23;8300:33;8297:53;;;8346:1;8343;8336:12;8297:53;8369:29;8388:9;8369:29;:::i;:::-;8359:39;-1:-1:-1;8467:2:108;8452:18;;8439:32;;-1:-1:-1;8514:38:108;8548:2;8533:18;;8514:38;:::i;:::-;8504:48;;8603:2;8592:9;8588:18;8575:32;8630:18;8622:6;8619:30;8616:50;;;8662:1;8659;8652:12;8616:50;8701:58;8751:7;8742:6;8731:9;8727:22;8701:58;:::i;:::-;8778:8;;-1:-1:-1;8675:84:108;-1:-1:-1;;8866:3:108;8851:19;;8838:33;8896:18;8883:32;;8880:52;;;8928:1;8925;8918:12;8880:52;8951:75;9018:7;9007:8;8996:9;8992:24;8951:75;:::i;:::-;8941:85;;;8099:933;;;;;;;;:::o;9037:161::-;9103:5;9148:2;9139:6;9134:3;9130:16;9126:25;9123:45;;;9164:1;9161;9154:12;9203:933;9340:6;9348;9356;9364;9372;9380;9433:3;9421:9;9412:7;9408:23;9404:33;9401:53;;;9450:1;9447;9440:12;9401:53;9473:29;9492:9;9473:29;:::i;:::-;9463:39;;9521:38;9555:2;9544:9;9540:18;9521:38;:::i;:::-;9511:48;-1:-1:-1;9628:2:108;9613:18;;9600:32;;-1:-1:-1;9707:2:108;9692:18;;9679:32;9734:18;9723:30;;9720:50;;;9766:1;9763;9756:12;9720:50;9805:58;9855:7;9846:6;9835:9;9831:22;9805:58;:::i;:::-;9882:8;;-1:-1:-1;9779:84:108;-1:-1:-1;;9970:3:108;9955:19;;9942:33;10000:18;9987:32;;9984:52;;;10032:1;10029;10022:12;9984:52;10055:75;10122:7;10111:8;10100:9;10096:24;10055:75;:::i;10141:743::-;10260:6;10268;10276;10284;10337:2;10325:9;10316:7;10312:23;10308:32;10305:52;;;10353:1;10350;10343:12;10305:52;10376:29;10395:9;10376:29;:::i;:::-;10366:39;;10456:2;10445:9;10441:18;10428:32;10483:18;10475:6;10472:30;10469:50;;;10515:1;10512;10505:12;10469:50;10554:58;10604:7;10595:6;10584:9;10580:22;10554:58;:::i;:::-;10631:8;;-1:-1:-1;10528:84:108;-1:-1:-1;;10719:2:108;10704:18;;10691:32;10748:18;10735:32;;10732:52;;;10780:1;10777;10770:12;10732:52;10803:75;10870:7;10859:8;10848:9;10844:24;10803:75;:::i;10889:118::-;10975:5;10968:13;10961:21;10954:5;10951:32;10941:60;;10997:1;10994;10987:12;11012:559;11070:5;11077:6;11137:3;11124:17;11219:66;11208:8;11192:14;11188:29;11184:102;11164:18;11160:127;11150:155;;11301:1;11298;11291:12;11150:155;11329:33;;11433:4;11420:18;;;-1:-1:-1;11381:21:108;;-1:-1:-1;11461:18:108;11450:30;;11447:50;;;11493:1;11490;11483:12;11447:50;11540:6;11524:14;11520:27;11513:5;11509:39;11506:59;;;11561:1;11558;11551:12;11576:325;11664:6;11659:3;11652:19;11716:6;11709:5;11702:4;11697:3;11693:14;11680:43;;11768:1;11761:4;11752:6;11747:3;11743:16;11739:27;11732:38;11634:3;11890:4;11820:66;11815:2;11807:6;11803:15;11799:88;11794:3;11790:98;11786:109;11779:116;;11576:325;;;;:::o;11906:803::-;-1:-1:-1;;;;;12005:25:108;12024:5;12005:25;:::i;:::-;12001:74;11996:3;11989:87;11971:3;12124:4;12117:5;12113:16;12100:30;12139;12161:7;12139:30;:::i;:::-;12208:15;12201:23;12194:4;12185:14;;12178:47;-1:-1:-1;;;;;12261:36:108;12291:4;12280:16;;12261:36;:::i;:::-;12257:85;12250:4;12245:3;12241:14;12234:109;12386:55;12435:4;12428:5;12424:16;12417:5;12386:55;:::i;:::-;12473:4;12466;12461:3;12457:14;12450:28;12499:69;12562:4;12557:3;12553:14;12539:12;12525;12499:69;:::i;:::-;12637:4;12626:16;;;12613:30;12659:14;;;;12652:31;;;;-1:-1:-1;12487:81:108;;11906:803;-1:-1:-1;;11906:803:108:o;12714:655::-;13059:6;13048:9;13041:25;-1:-1:-1;;;;;13106:6:108;13102:55;13097:2;13086:9;13082:18;13075:83;13194:3;13189:2;13178:9;13174:18;13167:31;13235:1;13229:3;13218:9;13214:19;13207:30;13273:3;13268:2;13257:9;13253:18;13246:31;13022:4;13294:69;13358:3;13347:9;13343:19;13335:6;13294:69;:::i;13374:470::-;13619:2;13608:9;13601:21;13582:4;13645:61;13702:2;13691:9;13687:18;13679:6;13671;13645:61;:::i;:::-;13754:9;13746:6;13742:22;13737:2;13726:9;13722:18;13715:50;13782:56;13831:6;13823;13782:56;:::i;13849:315::-;14034:6;14023:9;14016:25;14077:2;14072;14061:9;14057:18;14050:30;13997:4;14097:61;14154:2;14143:9;14139:18;14131:6;14123;14097:61;:::i;14471:245::-;14538:6;14591:2;14579:9;14570:7;14566:23;14562:32;14559:52;;;14607:1;14604;14597:12;14559:52;14639:9;14633:16;14658:28;14680:5;14658:28;:::i;14721:184::-;14791:6;14844:2;14832:9;14823:7;14819:23;14815:32;14812:52;;;14860:1;14857;14850:12;14812:52;-1:-1:-1;14883:16:108;;14721:184;-1:-1:-1;14721:184:108:o;15120:663::-;15421:6;15410:9;15403:25;-1:-1:-1;;;;;15468:6:108;15464:55;15459:2;15448:9;15444:18;15437:83;15556:3;15551:2;15540:9;15536:18;15529:31;15384:4;15583:62;15640:3;15629:9;15625:19;15617:6;15609;15583:62;:::i;:::-;15693:9;15685:6;15681:22;15676:2;15665:9;15661:18;15654:50;15721:56;15770:6;15762;15721:56;:::i;:::-;15713:64;15120:663;-1:-1:-1;;;;;;;;15120:663:108:o;16002:588::-;-1:-1:-1;;;;;16101:25:108;16120:5;16101:25;:::i;:::-;16097:74;16092:3;16085:87;16067:3;16220:4;16213:5;16209:16;16196:30;16258:18;16249:7;16245:32;16308:2;16299:7;16296:15;16286:43;;16325:1;16322;16315:12;16286:43;16354:4;16345:14;;16338:26;-1:-1:-1;16407:55:108;16456:4;16445:16;;16449:5;16407:55;:::i;:::-;16494:4;16487;16482:3;16478:14;16471:28;16515:69;16578:4;16573:3;16569:14;16555:12;16541;16515:69;:::i;16595:283::-;16784:2;16773:9;16766:21;16747:4;16804:68;16868:2;16857:9;16853:18;16845:6;16804:68;:::i;16883:541::-;17156:6;17145:9;17138:25;17199:2;17194;17183:9;17179:18;17172:30;17119:4;17225:61;17282:2;17271:9;17267:18;17259:6;17251;17225:61;:::i;:::-;17334:9;17326:6;17322:22;17317:2;17306:9;17302:18;17295:50;17362:56;17411:6;17403;17362:56;:::i;:::-;17354:64;16883:541;-1:-1:-1;;;;;;;16883:541:108:o;17611:271::-;17794:6;17786;17781:3;17768:33;17750:3;17820:16;;17845:13;;;17820:16;17611:271;-1:-1:-1;17611:271:108:o;19110:287::-;19239:3;19277:6;19271:13;19293:66;19352:6;19347:3;19340:4;19332:6;19328:17;19293:66;:::i;:::-;19375:16;;;;;19110:287;-1:-1:-1;;19110:287:108:o","linkReferences":{},"immutableReferences":{"44509":[{"start":8570,"length":32},{"start":8611,"length":32},{"start":9775,"length":32}]}},"methodIdentifiers":{"ASSET_HANDLER_ROLE()":"5d62c860","DEFAULT_ADMIN_ROLE()":"a217fddf","PAUSER_ROLE()":"e63ab1e9","TSS_ROLE()":"a783c789","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","call(address,bytes,(address,bool,address,bytes,uint256))":"1becceb4","custody()":"dda79b75","deposit(address,(address,bool,address,bytes,uint256))":"726ac97c","deposit(address,uint256,address,(address,bool,address,bytes,uint256))":"102614b0","depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":"744b9b8b","depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":"d09e3b78","execute(address,bytes)":"1cff79cd","executeRevert(address,bytes,(address,uint64,bytes))":"f7ad60db","executeWithERC20(address,address,uint256,bytes)":"5131ab59","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address,address)":"c0c53b8b","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":"d0b492c3","revokeRole(bytes32,address)":"d547741f","setConnector(address)":"10188aef","setCustody(address)":"ae7a3a6f","supportsInterface(bytes4)":"01ffc9a7","tssAddress()":"5b112591","unpause()":"3f4ba83a","upgradeToAndCall(address,bytes)":"4f1ef286","zetaConnector()":"57bec62f","zetaToken()":"21e093b1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConnectorInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotWhitelistedInCustody\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Called\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET_HANDLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TSS_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tssAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"zetaToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zetaConnector_\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custody_\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The contract doesn't hold any funds and should never have active allowances.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Called(address,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"The calldata passed to the call.\",\"receiver\":\"The address of the receiver.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\"}},\"Deposited(address,address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of ETH or tokens deposited.\",\"asset\":\"The address of the ERC20 token (zero address if ETH).\",\"payload\":\"The calldata passed with the deposit.\",\"receiver\":\"The address of the receiver.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\"}},\"Executed(address,uint256,bytes)\":{\"params\":{\"data\":\"The calldata passed to the contract call.\",\"destination\":\"The address of the contract called.\",\"value\":\"The amount of ETH sent with the call.\"}},\"ExecutedWithERC20(address,address,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens transferred.\",\"data\":\"The calldata passed to the contract call.\",\"to\":\"The address of the contract called.\",\"token\":\"The address of the ERC20 token.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Reverted(address,address,uint256,bytes,(address,uint64,bytes))\":{\"params\":{\"amount\":\"The amount of ETH sent with the call.\",\"data\":\"The calldata passed to the contract call.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"to\":\"The address of the contract called.\",\"token\":\"The address of the ERC20 token, empty if gas token\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"call(address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"deposit(address,(address,bool,address,bytes,uint256))\":{\"params\":{\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"deposit(address,uint256,address,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"Amount of tokens to deposit.\",\"asset\":\"Address of the ERC20 token.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"Amount of tokens to deposit.\",\"asset\":\"Address of the ERC20 token.\",\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"execute(address,bytes)\":{\"details\":\"This function can only be called by the TSS address and it is payable.\",\"params\":{\"data\":\"Calldata to pass to the call.\",\"destination\":\"Address to call.\"},\"returns\":{\"_0\":\"The result of the call.\"}},\"executeRevert(address,bytes,(address,uint64,bytes))\":{\"details\":\"This function can only be called by the TSS address and it is payable.\",\"params\":{\"data\":\"Calldata to pass to the call.\",\"destination\":\"Address to call.\"}},\"executeWithERC20(address,address,uint256,bytes)\":{\"details\":\"This function can only be called by the custody or connector address. It uses the ERC20 allowance system, resetting gateway allowance at the end.\",\"params\":{\"amount\":\"Amount of tokens to transfer.\",\"data\":\"Calldata to pass to the call.\",\"to\":\"Address of the contract to call.\",\"token\":\"Address of the ERC20 token.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address,address)\":{\"details\":\"Using admin to authorize upgrades and pause, and tss for tss role.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))\":{\"details\":\"This function can only be called by the custody or connector address.\",\"params\":{\"amount\":\"Amount of tokens to transfer.\",\"data\":\"Calldata to pass to the call.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"to\":\"Address of the contract to call.\",\"token\":\"Address of the ERC20 token.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setConnector(address)\":{\"params\":{\"zetaConnector_\":\"Address of the connector contract.\"}},\"setCustody(address)\":{\"params\":{\"custody_\":\"Address of the custody contract.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"GatewayEVM\",\"version\":1},\"userdoc\":{\"errors\":{\"ApprovalFailed()\":[{\"notice\":\"Error for failed token approval.\"}],\"ConnectorInitialized()\":[{\"notice\":\"Error for already initialized connector.\"}],\"CustodyInitialized()\":[{\"notice\":\"Error for already initialized custody.\"}],\"DepositFailed()\":[{\"notice\":\"Error for failed deposit.\"}],\"ExecutionFailed()\":[{\"notice\":\"Error for failed execution.\"}],\"InsufficientERC20Amount()\":[{\"notice\":\"Error for insufficient ERC20 token amount.\"}],\"InsufficientETHAmount()\":[{\"notice\":\"Error for insufficient ETH amount.\"}],\"NotWhitelistedInCustody()\":[{\"notice\":\"Error when trying to transfer not whitelisted token to custody.\"}],\"ZeroAddress()\":[{\"notice\":\"Error for zero address input.\"}]},\"events\":{\"Called(address,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when an omnichain smart contract call is made without asset transfer.\"},\"Deposited(address,address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a deposit is made.\"},\"Executed(address,uint256,bytes)\":{\"notice\":\"Emitted when a contract call is executed.\"},\"ExecutedWithERC20(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a contract call with ERC20 tokens is executed.\"},\"Reverted(address,address,uint256,bytes,(address,uint64,bytes))\":{\"notice\":\"Emitted when a contract call is reverted.\"}},\"kind\":\"user\",\"methods\":{\"ASSET_HANDLER_ROLE()\":{\"notice\":\"New role identifier for asset handler role.\"},\"PAUSER_ROLE()\":{\"notice\":\"New role identifier for pauser role.\"},\"TSS_ROLE()\":{\"notice\":\"New role identifier for tss role.\"},\"call(address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Calls an omnichain smart contract without asset transfer.\"},\"custody()\":{\"notice\":\"The address of the custody contract.\"},\"deposit(address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ETH to the TSS address.\"},\"deposit(address,uint256,address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ERC20 tokens to the custody or connector contract.\"},\"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ETH to the TSS address and calls an omnichain smart contract.\"},\"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract.\"},\"execute(address,bytes)\":{\"notice\":\"Executes a call to a destination address without ERC20 tokens.\"},\"executeRevert(address,bytes,(address,uint64,bytes))\":{\"notice\":\"Transfers msg.value to destination contract and executes it's onRevert function.\"},\"executeWithERC20(address,address,uint256,bytes)\":{\"notice\":\"Executes a call to a destination contract using ERC20 tokens.\"},\"initialize(address,address,address)\":{\"notice\":\"Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\"},\"pause()\":{\"notice\":\"Pause contract.\"},\"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))\":{\"notice\":\"Directly transfers ERC20 tokens and calls onRevert.\"},\"setConnector(address)\":{\"notice\":\"Sets the connector contract address.\"},\"setCustody(address)\":{\"notice\":\"Sets the custody contract address.\"},\"tssAddress()\":{\"notice\":\"The address of the TSS (Threshold Signature Scheme) contract.\"},\"unpause()\":{\"notice\":\"Unpause contract.\"},\"zetaConnector()\":{\"notice\":\"The address of the ZetaConnector contract.\"},\"zetaToken()\":{\"notice\":\"The address of the Zeta token contract.\"}},\"notice\":\"The GatewayEVM contract is the endpoint to call smart contracts on external chains.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/evm/GatewayEVM.sol\":\"GatewayEVM\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/Revert.sol\":{\"keccak256\":\"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409\",\"dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY\"]},\"contracts/evm/GatewayEVM.sol\":{\"keccak256\":\"0x04f4dac61cbaa0e43d7ba3e10bc232acf3530ffe62da473de69e148d886e479c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db7bf0de61b174899c70c2a1f9b74e7a7093a820e9c05d786ef4137e6117c549\",\"dweb:/ipfs/QmViuoC93WLAwiq1F44qaWLQT4V6h96B6XfB5ZCUgLNUBg\"]},\"contracts/evm/ZetaConnectorBase.sol\":{\"keccak256\":\"0xdd289e7ac56aa09d5203fe5366aff97ac1591f45e55e9906545e99bf44ad1944\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed9aba1b7f2661645f1993a2f29b382acaedf90beca548982a89f3e124d23d53\",\"dweb:/ipfs/QmdvsKEwv9Ftyd3J8H4pBas4KjwmwpBjLxDiAABHiJ6TfX\"]},\"contracts/evm/interfaces/IERC20Custody.sol\":{\"keccak256\":\"0xd8ada536ba5aa69f38d6b2aea2a285331bda0ab8132e1e2a2132e01764566ed3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49b1e1b13a49df6f7cb3aa3b4290d9cedb3e884adbf1665fdb2951a6e37394d3\",\"dweb:/ipfs/QmT3VjYbju7rGs1xxpkqpyxqU4ftXaQdJHWb91JdwpCXoV\"]},\"contracts/evm/interfaces/IGatewayEVM.sol\":{\"keccak256\":\"0x6bee6d3bf75e7203ea02376791d1b1711e3933ecd95d94019c81d6158b43c1c3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42c16d5568e87aef1531b2d893b6b91ddfc29db7dda7c77f6e308761be1a0ffd\",\"dweb:/ipfs/QmTscYJ2sXFm5axr9CY8hFuKmYJwX2J9sW8kT131TNk4Y1\"]},\"contracts/evm/interfaces/IZetaConnector.sol\":{\"keccak256\":\"0xa08a49c014d92d720a986d47f1e9a977e528ced7d057b349d057451840864ad6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62dd7b7b30718b4302fc66eb9ed199a87e735b348eab445e8a1fa2bfde2f85ac\",\"dweb:/ipfs/QmTgcgSH9n8rjEfPRuB8W82ysfn9mGeRqqTenr5jzxqVFN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"AddressInsufficientBalance"},{"inputs":[],"type":"error","name":"ApprovalFailed"},{"inputs":[],"type":"error","name":"ConnectorInitialized"},{"inputs":[],"type":"error","name":"CustodyInitialized"},{"inputs":[],"type":"error","name":"DepositFailed"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExecutionFailed"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InsufficientERC20Amount"},{"inputs":[],"type":"error","name":"InsufficientETHAmount"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"NotWhitelistedInCustody"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Called","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"address","name":"asset","type":"address","indexed":false},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Deposited","anonymous":false},{"inputs":[{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"Executed","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"ExecutedWithERC20","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}],"indexed":false}],"type":"event","name":"Reverted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ASSET_HANDLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TSS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"call"},{"inputs":[],"stateMutability":"view","type":"function","name":"custody","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"payable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"payable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"executeRevert"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeWithERC20"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"tssAddress_","type":"address"},{"internalType":"address","name":"zetaToken_","type":"address"},{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"revertWithERC20"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address","name":"zetaConnector_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setConnector"},{"inputs":[{"internalType":"address","name":"custody_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCustody"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"tssAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaConnector","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaToken","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"call(address,bytes,(address,bool,address,bytes,uint256))":{"params":{"payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"deposit(address,(address,bool,address,bytes,uint256))":{"params":{"receiver":"Address of the receiver.","revertOptions":"Revert options."}},"deposit(address,uint256,address,(address,bool,address,bytes,uint256))":{"params":{"amount":"Amount of tokens to deposit.","asset":"Address of the ERC20 token.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":{"params":{"payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":{"params":{"amount":"Amount of tokens to deposit.","asset":"Address of the ERC20 token.","payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"execute(address,bytes)":{"details":"This function can only be called by the TSS address and it is payable.","params":{"data":"Calldata to pass to the call.","destination":"Address to call."},"returns":{"_0":"The result of the call."}},"executeRevert(address,bytes,(address,uint64,bytes))":{"details":"This function can only be called by the TSS address and it is payable.","params":{"data":"Calldata to pass to the call.","destination":"Address to call."}},"executeWithERC20(address,address,uint256,bytes)":{"details":"This function can only be called by the custody or connector address. It uses the ERC20 allowance system, resetting gateway allowance at the end.","params":{"amount":"Amount of tokens to transfer.","data":"Calldata to pass to the call.","to":"Address of the contract to call.","token":"Address of the ERC20 token."}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address,address)":{"details":"Using admin to authorize upgrades and pause, and tss for tss role."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":{"details":"This function can only be called by the custody or connector address.","params":{"amount":"Amount of tokens to transfer.","data":"Calldata to pass to the call.","revertContext":"Revert context to pass to onRevert.","to":"Address of the contract to call.","token":"Address of the ERC20 token."}},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setConnector(address)":{"params":{"zetaConnector_":"Address of the connector contract."}},"setCustody(address)":{"params":{"custody_":"Address of the custody contract."}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"ASSET_HANDLER_ROLE()":{"notice":"New role identifier for asset handler role."},"PAUSER_ROLE()":{"notice":"New role identifier for pauser role."},"TSS_ROLE()":{"notice":"New role identifier for tss role."},"call(address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Calls an omnichain smart contract without asset transfer."},"custody()":{"notice":"The address of the custody contract."},"deposit(address,(address,bool,address,bytes,uint256))":{"notice":"Deposits ETH to the TSS address."},"deposit(address,uint256,address,(address,bool,address,bytes,uint256))":{"notice":"Deposits ERC20 tokens to the custody or connector contract."},"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Deposits ETH to the TSS address and calls an omnichain smart contract."},"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract."},"execute(address,bytes)":{"notice":"Executes a call to a destination address without ERC20 tokens."},"executeRevert(address,bytes,(address,uint64,bytes))":{"notice":"Transfers msg.value to destination contract and executes it's onRevert function."},"executeWithERC20(address,address,uint256,bytes)":{"notice":"Executes a call to a destination contract using ERC20 tokens."},"initialize(address,address,address)":{"notice":"Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE."},"pause()":{"notice":"Pause contract."},"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":{"notice":"Directly transfers ERC20 tokens and calls onRevert."},"setConnector(address)":{"notice":"Sets the connector contract address."},"setCustody(address)":{"notice":"Sets the custody contract address."},"tssAddress()":{"notice":"The address of the TSS (Threshold Signature Scheme) contract."},"unpause()":{"notice":"Unpause contract."},"zetaConnector()":{"notice":"The address of the ZetaConnector contract."},"zetaToken()":{"notice":"The address of the Zeta token contract."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/evm/GatewayEVM.sol":"GatewayEVM"},"evmVersion":"london","libraries":{}},"sources":{"contracts/Revert.sol":{"keccak256":"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b","urls":["bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409","dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY"],"license":"MIT"},"contracts/evm/GatewayEVM.sol":{"keccak256":"0x04f4dac61cbaa0e43d7ba3e10bc232acf3530ffe62da473de69e148d886e479c","urls":["bzz-raw://db7bf0de61b174899c70c2a1f9b74e7a7093a820e9c05d786ef4137e6117c549","dweb:/ipfs/QmViuoC93WLAwiq1F44qaWLQT4V6h96B6XfB5ZCUgLNUBg"],"license":"MIT"},"contracts/evm/ZetaConnectorBase.sol":{"keccak256":"0xdd289e7ac56aa09d5203fe5366aff97ac1591f45e55e9906545e99bf44ad1944","urls":["bzz-raw://ed9aba1b7f2661645f1993a2f29b382acaedf90beca548982a89f3e124d23d53","dweb:/ipfs/QmdvsKEwv9Ftyd3J8H4pBas4KjwmwpBjLxDiAABHiJ6TfX"],"license":"MIT"},"contracts/evm/interfaces/IERC20Custody.sol":{"keccak256":"0xd8ada536ba5aa69f38d6b2aea2a285331bda0ab8132e1e2a2132e01764566ed3","urls":["bzz-raw://49b1e1b13a49df6f7cb3aa3b4290d9cedb3e884adbf1665fdb2951a6e37394d3","dweb:/ipfs/QmT3VjYbju7rGs1xxpkqpyxqU4ftXaQdJHWb91JdwpCXoV"],"license":"MIT"},"contracts/evm/interfaces/IGatewayEVM.sol":{"keccak256":"0x6bee6d3bf75e7203ea02376791d1b1711e3933ecd95d94019c81d6158b43c1c3","urls":["bzz-raw://42c16d5568e87aef1531b2d893b6b91ddfc29db7dda7c77f6e308761be1a0ffd","dweb:/ipfs/QmTscYJ2sXFm5axr9CY8hFuKmYJwX2J9sW8kT131TNk4Y1"],"license":"MIT"},"contracts/evm/interfaces/IZetaConnector.sol":{"keccak256":"0xa08a49c014d92d720a986d47f1e9a977e528ced7d057b349d057451840864ad6","urls":["bzz-raw://62dd7b7b30718b4302fc66eb9ed199a87e735b348eab445e8a1fa2bfde2f85ac","dweb:/ipfs/QmTgcgSH9n8rjEfPRuB8W82ysfn9mGeRqqTenr5jzxqVFN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol":{"keccak256":"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97","urls":["bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007","dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74","urls":["bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45","dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/AccessControl.sol":{"keccak256":"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308","urls":["bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80","dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":523,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"custody","offset":0,"slot":"0","type":"t_address"},{"astId":526,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"tssAddress","offset":0,"slot":"1","type":"t_address"},{"astId":529,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"zetaConnector","offset":0,"slot":"2","type":"t_address"},{"astId":532,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"zetaToken","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"ast":{"absolutePath":"contracts/evm/GatewayEVM.sol","id":1449,"exportedSymbols":{"AccessControlUpgradeable":[44235],"Address":[47717],"ContextUpgradeable":[44717],"ERC165Upgradeable":[45062],"ERC1967Utils":[46098],"GatewayEVM":[1448],"IAccessControl":[45441],"IERC1822Proxiable":[45620],"IERC20":[47066],"IERC20Custody":[2206],"IERC20Permit":[47174],"IGatewayEVM":[2415],"Initializable":[44489],"PausableUpgradeable":[44893],"ReentrancyGuardUpgradeable":[45022],"RevertContext":[21],"RevertOptions":[13],"Revertable":[30],"SafeERC20":[47464],"UUPSUpgradeable":[44671],"ZetaConnectorBase":[1644]},"nodeType":"SourceUnit","src":"32:14874:2","nodes":[{"id":486,"nodeType":"PragmaDirective","src":"32:23:2","nodes":[],"literals":["solidity","0.8",".26"]},{"id":490,"nodeType":"ImportDirective","src":"57:86:2","nodes":[],"absolutePath":"contracts/Revert.sol","file":"../../contracts/Revert.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":31,"symbolAliases":[{"foreign":{"id":487,"name":"RevertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"66:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":488,"name":"RevertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"81:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":489,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"96:10:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":492,"nodeType":"ImportDirective","src":"144:60:2","nodes":[],"absolutePath":"contracts/evm/ZetaConnectorBase.sol","file":"./ZetaConnectorBase.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":1645,"symbolAliases":[{"foreign":{"id":491,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"153:17:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":494,"nodeType":"ImportDirective","src":"205:63:2","nodes":[],"absolutePath":"contracts/evm/interfaces/IERC20Custody.sol","file":"./interfaces/IERC20Custody.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":2207,"symbolAliases":[{"foreign":{"id":493,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"214:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":496,"nodeType":"ImportDirective","src":"269:59:2","nodes":[],"absolutePath":"contracts/evm/interfaces/IGatewayEVM.sol","file":"./interfaces/IGatewayEVM.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":2416,"symbolAliases":[{"foreign":{"id":495,"name":"IGatewayEVM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"278:11:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":497,"nodeType":"ImportDirective","src":"330:81:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44236,"symbolAliases":[],"unitAlias":""},{"id":498,"nodeType":"ImportDirective","src":"412:75:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44490,"symbolAliases":[],"unitAlias":""},{"id":499,"nodeType":"ImportDirective","src":"488:77:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44672,"symbolAliases":[],"unitAlias":""},{"id":500,"nodeType":"ImportDirective","src":"566:75:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44894,"symbolAliases":[],"unitAlias":""},{"id":501,"nodeType":"ImportDirective","src":"642:82:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":45023,"symbolAliases":[],"unitAlias":""},{"id":502,"nodeType":"ImportDirective","src":"725:56:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":47067,"symbolAliases":[],"unitAlias":""},{"id":503,"nodeType":"ImportDirective","src":"782:65:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":47465,"symbolAliases":[],"unitAlias":""},{"id":1448,"nodeType":"ContractDefinition","src":"1053:13852:2","nodes":[{"id":520,"nodeType":"UsingForDirective","src":"1225:27:2","nodes":[],"global":false,"libraryName":{"id":517,"name":"SafeERC20","nameLocations":["1231:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":47464,"src":"1231:9:2"},"typeName":{"id":519,"nodeType":"UserDefinedTypeName","pathNode":{"id":518,"name":"IERC20","nameLocations":["1245:6:2"],"nodeType":"IdentifierPath","referencedDeclaration":47066,"src":"1245:6:2"},"referencedDeclaration":47066,"src":"1245:6:2","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}}},{"id":523,"nodeType":"VariableDeclaration","src":"1311:22:2","nodes":[],"constant":false,"documentation":{"id":521,"nodeType":"StructuredDocumentation","src":"1258:48:2","text":"@notice The address of the custody contract."},"functionSelector":"dda79b75","mutability":"mutable","name":"custody","nameLocation":"1326:7:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":522,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":526,"nodeType":"VariableDeclaration","src":"1417:25:2","nodes":[],"constant":false,"documentation":{"id":524,"nodeType":"StructuredDocumentation","src":"1339:73:2","text":"@notice The address of the TSS (Threshold Signature Scheme) contract."},"functionSelector":"5b112591","mutability":"mutable","name":"tssAddress","nameLocation":"1432:10:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"1417:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":529,"nodeType":"VariableDeclaration","src":"1507:28:2","nodes":[],"constant":false,"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"1448:54:2","text":"@notice The address of the ZetaConnector contract."},"functionSelector":"57bec62f","mutability":"mutable","name":"zetaConnector","nameLocation":"1522:13:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":528,"name":"address","nodeType":"ElementaryTypeName","src":"1507:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":532,"nodeType":"VariableDeclaration","src":"1597:24:2","nodes":[],"constant":false,"documentation":{"id":530,"nodeType":"StructuredDocumentation","src":"1541:51:2","text":"@notice The address of the Zeta token contract."},"functionSelector":"21e093b1","mutability":"mutable","name":"zetaToken","nameLocation":"1612:9:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":531,"name":"address","nodeType":"ElementaryTypeName","src":"1597:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":538,"nodeType":"VariableDeclaration","src":"1678:56:2","nodes":[],"constant":true,"documentation":{"id":533,"nodeType":"StructuredDocumentation","src":"1628:45:2","text":"@notice New role identifier for tss role."},"functionSelector":"a783c789","mutability":"constant","name":"TSS_ROLE","nameLocation":"1702:8:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1678:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5453535f524f4c45","id":536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1723:10:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb","typeString":"literal_string \"TSS_ROLE\""},"value":"TSS_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb","typeString":"literal_string \"TSS_ROLE\""}],"id":535,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1713:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:21:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":544,"nodeType":"VariableDeclaration","src":"1800:76:2","nodes":[],"constant":true,"documentation":{"id":539,"nodeType":"StructuredDocumentation","src":"1740:55:2","text":"@notice New role identifier for asset handler role."},"functionSelector":"5d62c860","mutability":"constant","name":"ASSET_HANDLER_ROLE","nameLocation":"1824:18:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":540,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1800:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"41535345545f48414e444c45525f524f4c45","id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1855:20:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9","typeString":"literal_string \"ASSET_HANDLER_ROLE\""},"value":"ASSET_HANDLER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9","typeString":"literal_string \"ASSET_HANDLER_ROLE\""}],"id":541,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1845:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1845:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":550,"nodeType":"VariableDeclaration","src":"1935:62:2","nodes":[],"constant":true,"documentation":{"id":545,"nodeType":"StructuredDocumentation","src":"1882:48:2","text":"@notice New role identifier for pauser role."},"functionSelector":"e63ab1e9","mutability":"constant","name":"PAUSER_ROLE","nameLocation":"1959:11:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1935:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5041555345525f524f4c45","id":548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1983:13:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""},"value":"PAUSER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""}],"id":547,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1973:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1973:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":558,"nodeType":"FunctionDefinition","src":"2057:53:2","nodes":[],"body":{"id":557,"nodeType":"Block","src":"2071:39:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":554,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44457,"src":"2081:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":556,"nodeType":"ExpressionStatement","src":"2081:22:2"}]},"documentation":{"id":551,"nodeType":"StructuredDocumentation","src":"2004:48:2","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":552,"nodeType":"ParameterList","parameters":[],"src":"2068:2:2"},"returnParameters":{"id":553,"nodeType":"ParameterList","parameters":[],"src":"2071:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":624,"nodeType":"FunctionDefinition","src":"2308:543:2","nodes":[],"body":{"id":623,"nodeType":"Block","src":"2404:447:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":570,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2418:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2441:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2433:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":571,"name":"address","nodeType":"ElementaryTypeName","src":"2433:7:2","typeDescriptions":{}}},"id":574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2433:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2418:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":576,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2447:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2469:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2461:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":577,"name":"address","nodeType":"ElementaryTypeName","src":"2461:7:2","typeDescriptions":{}}},"id":580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2447:24:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2418:53:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":587,"nodeType":"IfStatement","src":"2414:104:2","trueBody":{"id":586,"nodeType":"Block","src":"2473:45:2","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":583,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"2494:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2494:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":585,"nodeType":"RevertStatement","src":"2487:20:2"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":588,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44543,"src":"2527:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2527:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":590,"nodeType":"ExpressionStatement","src":"2527:24:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":591,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44933,"src":"2561:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2561:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":593,"nodeType":"ExpressionStatement","src":"2561:24:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":594,"name":"__AccessControl_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43936,"src":"2595:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2595:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":596,"nodeType":"ExpressionStatement","src":"2595:22:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":597,"name":"__Pausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44769,"src":"2627:15:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2627:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":599,"nodeType":"ExpressionStatement","src":"2627:17:2"},{"expression":{"arguments":[{"id":601,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2666:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":602,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"2686:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":600,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2655:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":604,"nodeType":"ExpressionStatement","src":"2655:38:2"},{"expression":{"arguments":[{"id":606,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"2714:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":607,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"2727:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":605,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2703:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2703:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":609,"nodeType":"ExpressionStatement","src":"2703:31:2"},{"expression":{"id":612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":610,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"2744:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":611,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2757:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2744:24:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":613,"nodeType":"ExpressionStatement","src":"2744:24:2"},{"expression":{"arguments":[{"id":615,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"2789:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":616,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2799:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":614,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2778:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2778:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":618,"nodeType":"ExpressionStatement","src":"2778:33:2"},{"expression":{"id":621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":619,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"2822:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":620,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2834:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2822:22:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":622,"nodeType":"ExpressionStatement","src":"2822:22:2"}]},"documentation":{"id":559,"nodeType":"StructuredDocumentation","src":"2116:187:2","text":"@notice Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\n @dev Using admin to authorize upgrades and pause, and tss for tss role."},"functionSelector":"c0c53b8b","implemented":true,"kind":"function","modifiers":[{"id":568,"kind":"modifierInvocation","modifierName":{"id":567,"name":"initializer","nameLocations":["2392:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":44343,"src":"2392:11:2"},"nodeType":"ModifierInvocation","src":"2392:11:2"}],"name":"initialize","nameLocation":"2317:10:2","parameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":561,"mutability":"mutable","name":"tssAddress_","nameLocation":"2336:11:2","nodeType":"VariableDeclaration","scope":624,"src":"2328:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":560,"name":"address","nodeType":"ElementaryTypeName","src":"2328:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":563,"mutability":"mutable","name":"zetaToken_","nameLocation":"2357:10:2","nodeType":"VariableDeclaration","scope":624,"src":"2349:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":562,"name":"address","nodeType":"ElementaryTypeName","src":"2349:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":565,"mutability":"mutable","name":"admin_","nameLocation":"2377:6:2","nodeType":"VariableDeclaration","scope":624,"src":"2369:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":564,"name":"address","nodeType":"ElementaryTypeName","src":"2369:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2327:57:2"},"returnParameters":{"id":569,"nodeType":"ParameterList","parameters":[],"src":"2404:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":635,"nodeType":"FunctionDefinition","src":"3000:104:2","nodes":[],"body":{"id":634,"nodeType":"Block","src":"3101:3:2","nodes":[],"statements":[]},"baseFunctions":[44625],"documentation":{"id":625,"nodeType":"StructuredDocumentation","src":"2857:138:2","text":"@dev Authorizes the upgrade of the contract, sender must be owner.\n @param newImplementation Address of the new implementation."},"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":631,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"3081:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":632,"kind":"modifierInvocation","modifierName":{"id":630,"name":"onlyRole","nameLocations":["3072:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3072:8:2"},"nodeType":"ModifierInvocation","src":"3072:28:2"}],"name":"_authorizeUpgrade","nameLocation":"3009:17:2","overrides":{"id":629,"nodeType":"OverrideSpecifier","overrides":[],"src":"3063:8:2"},"parameters":{"id":628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":627,"mutability":"mutable","name":"newImplementation","nameLocation":"3035:17:2","nodeType":"VariableDeclaration","scope":635,"src":"3027:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":626,"name":"address","nodeType":"ElementaryTypeName","src":"3027:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3026:27:2"},"returnParameters":{"id":633,"nodeType":"ParameterList","parameters":[],"src":"3101:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":666,"nodeType":"FunctionDefinition","src":"3319:261:2","nodes":[],"body":{"id":665,"nodeType":"Block","src":"3411:169:2","nodes":[],"statements":[{"assignments":[646,648],"declarations":[{"constant":false,"id":646,"mutability":"mutable","name":"success","nameLocation":"3427:7:2","nodeType":"VariableDeclaration","scope":665,"src":"3422:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":645,"name":"bool","nodeType":"ElementaryTypeName","src":"3422:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":648,"mutability":"mutable","name":"result","nameLocation":"3449:6:2","nodeType":"VariableDeclaration","scope":665,"src":"3436:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":647,"name":"bytes","nodeType":"ElementaryTypeName","src":"3436:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":656,"initialValue":{"arguments":[{"id":654,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"3496:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":649,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"3459:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3471:4:2","memberName":"call","nodeType":"MemberAccess","src":"3459:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":651,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3484:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3488:5:2","memberName":"value","nodeType":"MemberAccess","src":"3484:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3459:36:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3459:42:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3421:80:2"},{"condition":{"id":658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3515:8:2","subExpression":{"id":657,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"3516:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":662,"nodeType":"IfStatement","src":"3511:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":659,"name":"ExecutionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"3532:15:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3532:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":661,"nodeType":"RevertStatement","src":"3525:24:2"}},{"expression":{"id":663,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":648,"src":"3567:6:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":644,"id":664,"nodeType":"Return","src":"3560:13:2"}]},"documentation":{"id":636,"nodeType":"StructuredDocumentation","src":"3110:204:2","text":"@dev Internal function to execute a call to a destination address.\n @param destination Address to call.\n @param data Calldata to pass to the call.\n @return The result of the call."},"implemented":true,"kind":"function","modifiers":[],"name":"_execute","nameLocation":"3328:8:2","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":638,"mutability":"mutable","name":"destination","nameLocation":"3345:11:2","nodeType":"VariableDeclaration","scope":666,"src":"3337:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":637,"name":"address","nodeType":"ElementaryTypeName","src":"3337:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":640,"mutability":"mutable","name":"data","nameLocation":"3373:4:2","nodeType":"VariableDeclaration","scope":666,"src":"3358:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":639,"name":"bytes","nodeType":"ElementaryTypeName","src":"3358:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3336:42:2"},"returnParameters":{"id":644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":666,"src":"3397:12:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":642,"name":"bytes","nodeType":"ElementaryTypeName","src":"3397:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3396:14:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":677,"nodeType":"FunctionDefinition","src":"3618:73:2","nodes":[],"body":{"id":676,"nodeType":"Block","src":"3666:25:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":673,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44868,"src":"3676:6:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3676:8:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":675,"nodeType":"ExpressionStatement","src":"3676:8:2"}]},"documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"3586:27:2","text":"@notice Pause contract."},"functionSelector":"8456cb59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":670,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"3653:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":671,"kind":"modifierInvocation","modifierName":{"id":669,"name":"onlyRole","nameLocations":["3644:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3644:8:2"},"nodeType":"ModifierInvocation","src":"3644:21:2"}],"name":"pause","nameLocation":"3627:5:2","parameters":{"id":668,"nodeType":"ParameterList","parameters":[],"src":"3632:2:2"},"returnParameters":{"id":672,"nodeType":"ParameterList","parameters":[],"src":"3666:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":688,"nodeType":"FunctionDefinition","src":"3731:77:2","nodes":[],"body":{"id":687,"nodeType":"Block","src":"3781:27:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":684,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"3791:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3791:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":686,"nodeType":"ExpressionStatement","src":"3791:10:2"}]},"documentation":{"id":678,"nodeType":"StructuredDocumentation","src":"3697:29:2","text":"@notice Unpause contract."},"functionSelector":"3f4ba83a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":681,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"3768:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":682,"kind":"modifierInvocation","modifierName":{"id":680,"name":"onlyRole","nameLocations":["3759:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3759:8:2"},"nodeType":"ModifierInvocation","src":"3759:21:2"}],"name":"unpause","nameLocation":"3740:7:2","parameters":{"id":679,"nodeType":"ParameterList","parameters":[],"src":"3747:2:2"},"returnParameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"3781:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":752,"nodeType":"FunctionDefinition","src":"4089:560:2","nodes":[],"body":{"id":751,"nodeType":"Block","src":"4327:322:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":706,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4341:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4364:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4356:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":707,"name":"address","nodeType":"ElementaryTypeName","src":"4356:7:2","typeDescriptions":{}}},"id":710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4356:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4341:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":715,"nodeType":"IfStatement","src":"4337:51:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":712,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"4375:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4375:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":714,"nodeType":"RevertStatement","src":"4368:20:2"}},{"assignments":[717,null],"declarations":[{"constant":false,"id":717,"mutability":"mutable","name":"success","nameLocation":"4404:7:2","nodeType":"VariableDeclaration","scope":751,"src":"4399:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":716,"name":"bool","nodeType":"ElementaryTypeName","src":"4399:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":725,"initialValue":{"arguments":[{"hexValue":"","id":723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4453:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":718,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4416:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4428:4:2","memberName":"call","nodeType":"MemberAccess","src":"4416:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":720,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4441:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4445:5:2","memberName":"value","nodeType":"MemberAccess","src":"4441:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4416:36:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4416:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4398:58:2"},{"condition":{"id":727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4470:8:2","subExpression":{"id":726,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"4471:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":731,"nodeType":"IfStatement","src":"4466:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":728,"name":"ExecutionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"4487:15:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4487:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":730,"nodeType":"RevertStatement","src":"4480:24:2"}},{"expression":{"arguments":[{"id":736,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"4547:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":733,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4525:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":732,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"4514:10:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Revertable_$30_$","typeString":"type(contract Revertable)"}},"id":734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4514:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Revertable_$30","typeString":"contract Revertable"}},"id":735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4538:8:2","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":29,"src":"4514:32:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4514:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":738,"nodeType":"ExpressionStatement","src":"4514:47:2"},{"eventCall":{"arguments":[{"id":740,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4586:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4607:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4599:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":741,"name":"address","nodeType":"ElementaryTypeName","src":"4599:7:2","typeDescriptions":{}}},"id":744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4599:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":745,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4611:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4615:5:2","memberName":"value","nodeType":"MemberAccess","src":"4611:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":747,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"4622:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":748,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"4628:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"id":739,"name":"Reverted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"4577:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory,struct RevertContext memory)"}},"id":749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4577:65:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":750,"nodeType":"EmitStatement","src":"4572:70:2"}]},"baseFunctions":[2330],"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"3814:270:2","text":"@notice Transfers msg.value to destination contract and executes it's onRevert function.\n @dev This function can only be called by the TSS address and it is payable.\n @param destination Address to call.\n @param data Calldata to pass to the call."},"functionSelector":"f7ad60db","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":699,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"4270:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":700,"kind":"modifierInvocation","modifierName":{"id":698,"name":"onlyRole","nameLocations":["4261:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"4261:8:2"},"nodeType":"ModifierInvocation","src":"4261:18:2"},{"id":702,"kind":"modifierInvocation","modifierName":{"id":701,"name":"whenNotPaused","nameLocations":["4288:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"4288:13:2"},"nodeType":"ModifierInvocation","src":"4288:13:2"},{"id":704,"kind":"modifierInvocation","modifierName":{"id":703,"name":"nonReentrant","nameLocations":["4310:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"4310:12:2"},"nodeType":"ModifierInvocation","src":"4310:12:2"}],"name":"executeRevert","nameLocation":"4098:13:2","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"mutability":"mutable","name":"destination","nameLocation":"4129:11:2","nodeType":"VariableDeclaration","scope":752,"src":"4121:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":690,"name":"address","nodeType":"ElementaryTypeName","src":"4121:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":693,"mutability":"mutable","name":"data","nameLocation":"4165:4:2","nodeType":"VariableDeclaration","scope":752,"src":"4150:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":692,"name":"bytes","nodeType":"ElementaryTypeName","src":"4150:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":696,"mutability":"mutable","name":"revertContext","nameLocation":"4202:13:2","nodeType":"VariableDeclaration","scope":752,"src":"4179:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":695,"nodeType":"UserDefinedTypeName","pathNode":{"id":694,"name":"RevertContext","nameLocations":["4179:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"4179:13:2"},"referencedDeclaration":21,"src":"4179:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"4111:110:2"},"returnParameters":{"id":705,"nodeType":"ParameterList","parameters":[],"src":"4327:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":796,"nodeType":"FunctionDefinition","src":"4952:424:2","nodes":[],"body":{"id":795,"nodeType":"Block","src":"5171:205:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":769,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5185:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5208:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5200:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":770,"name":"address","nodeType":"ElementaryTypeName","src":"5200:7:2","typeDescriptions":{}}},"id":773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5200:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5185:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":778,"nodeType":"IfStatement","src":"5181:51:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":775,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"5219:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5219:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":777,"nodeType":"RevertStatement","src":"5212:20:2"}},{"assignments":[780],"declarations":[{"constant":false,"id":780,"mutability":"mutable","name":"result","nameLocation":"5255:6:2","nodeType":"VariableDeclaration","scope":795,"src":"5242:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":779,"name":"bytes","nodeType":"ElementaryTypeName","src":"5242:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":785,"initialValue":{"arguments":[{"id":782,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5273:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":783,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"5286:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":781,"name":"_execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"5264:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes calldata) returns (bytes memory)"}},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5264:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5242:49:2"},{"eventCall":{"arguments":[{"id":787,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5316:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":788,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5329:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5333:5:2","memberName":"value","nodeType":"MemberAccess","src":"5329:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":790,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"5340:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":786,"name":"Executed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"5307:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory)"}},"id":791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5307:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":792,"nodeType":"EmitStatement","src":"5302:43:2"},{"expression":{"id":793,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":780,"src":"5363:6:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":768,"id":794,"nodeType":"Return","src":"5356:13:2"}]},"baseFunctions":[2340],"documentation":{"id":753,"nodeType":"StructuredDocumentation","src":"4655:292:2","text":"@notice Executes a call to a destination address without ERC20 tokens.\n @dev This function can only be called by the TSS address and it is payable.\n @param destination Address to call.\n @param data Calldata to pass to the call.\n @return The result of the call."},"functionSelector":"1cff79cd","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":760,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"5083:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":761,"kind":"modifierInvocation","modifierName":{"id":759,"name":"onlyRole","nameLocations":["5074:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"5074:8:2"},"nodeType":"ModifierInvocation","src":"5074:18:2"},{"id":763,"kind":"modifierInvocation","modifierName":{"id":762,"name":"whenNotPaused","nameLocations":["5101:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"5101:13:2"},"nodeType":"ModifierInvocation","src":"5101:13:2"},{"id":765,"kind":"modifierInvocation","modifierName":{"id":764,"name":"nonReentrant","nameLocations":["5123:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"5123:12:2"},"nodeType":"ModifierInvocation","src":"5123:12:2"}],"name":"execute","nameLocation":"4961:7:2","parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":755,"mutability":"mutable","name":"destination","nameLocation":"4986:11:2","nodeType":"VariableDeclaration","scope":796,"src":"4978:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":754,"name":"address","nodeType":"ElementaryTypeName","src":"4978:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":757,"mutability":"mutable","name":"data","nameLocation":"5022:4:2","nodeType":"VariableDeclaration","scope":796,"src":"5007:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":756,"name":"bytes","nodeType":"ElementaryTypeName","src":"5007:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4968:64:2"},"returnParameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":796,"src":"5153:12:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":766,"name":"bytes","nodeType":"ElementaryTypeName","src":"5153:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5152:14:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":897,"nodeType":"FunctionDefinition","src":"5834:1032:2","nodes":[],"body":{"id":896,"nodeType":"Block","src":"6061:805:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6075:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6085:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6075:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":821,"nodeType":"IfStatement","src":"6071:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":818,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"6095:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6095:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":820,"nodeType":"RevertStatement","src":"6088:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":822,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6134:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6148:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6140:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":823,"name":"address","nodeType":"ElementaryTypeName","src":"6140:7:2","typeDescriptions":{}}},"id":826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6134:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":831,"nodeType":"IfStatement","src":"6130:42:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":828,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"6159:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6159:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":830,"nodeType":"RevertStatement","src":"6152:20:2"}},{"condition":{"id":836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6245:25:2","subExpression":{"arguments":[{"id":833,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6260:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":834,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6267:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":832,"name":"resetApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"6246:13:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) returns (bool)"}},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6246:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":840,"nodeType":"IfStatement","src":"6241:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":837,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6279:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6279:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":839,"nodeType":"RevertStatement","src":"6272:23:2"}},{"condition":{"id":848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6309:34:2","subExpression":{"arguments":[{"id":845,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6332:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":846,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6336:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":842,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6317:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":841,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"6310:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6324:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"6310:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":852,"nodeType":"IfStatement","src":"6305:63:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":849,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6352:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6352:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":851,"nodeType":"RevertStatement","src":"6345:23:2"}},{"expression":{"arguments":[{"id":854,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6438:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":855,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"6442:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":853,"name":"_execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"6429:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes calldata) returns (bytes memory)"}},"id":856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6429:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":857,"nodeType":"ExpressionStatement","src":"6429:18:2"},{"condition":{"id":862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6488:25:2","subExpression":{"arguments":[{"id":859,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6503:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":860,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6510:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":858,"name":"resetApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"6489:13:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) returns (bool)"}},"id":861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6489:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":866,"nodeType":"IfStatement","src":"6484:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":863,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6522:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6522:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":865,"nodeType":"RevertStatement","src":"6515:23:2"}},{"assignments":[868],"declarations":[{"constant":false,"id":868,"mutability":"mutable","name":"remainingBalance","nameLocation":"6637:16:2","nodeType":"VariableDeclaration","scope":896,"src":"6629:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":867,"name":"uint256","nodeType":"ElementaryTypeName","src":"6629:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":878,"initialValue":{"arguments":[{"arguments":[{"id":875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6688:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}],"id":874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6680:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":873,"name":"address","nodeType":"ElementaryTypeName","src":"6680:7:2","typeDescriptions":{}}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6680:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":870,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6663:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":869,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"6656:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6656:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6670:9:2","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":47023,"src":"6656:23:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6656:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6629:65:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":879,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6708:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6727:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6708:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":888,"nodeType":"IfStatement","src":"6704:98:2","trueBody":{"id":887,"nodeType":"Block","src":"6730:72:2","statements":[{"expression":{"arguments":[{"id":883,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6767:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":884,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6774:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":882,"name":"transferToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1447,"src":"6744:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6744:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"6744:47:2"}]}},{"eventCall":{"arguments":[{"id":890,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6835:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":891,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6842:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":892,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6846:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":893,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"6854:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":889,"name":"ExecutedWithERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2244,"src":"6817:17:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6817:42:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":895,"nodeType":"EmitStatement","src":"6812:47:2"}]},"baseFunctions":[2319],"documentation":{"id":797,"nodeType":"StructuredDocumentation","src":"5382:447:2","text":"@notice Executes a call to a destination contract using ERC20 tokens.\n @dev This function can only be called by the custody or connector address.\n It uses the ERC20 allowance system, resetting gateway allowance at the end.\n @param token Address of the ERC20 token.\n @param to Address of the contract to call.\n @param amount Amount of tokens to transfer.\n @param data Calldata to pass to the call."},"functionSelector":"5131ab59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":808,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"5994:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":809,"kind":"modifierInvocation","modifierName":{"id":807,"name":"onlyRole","nameLocations":["5985:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"5985:8:2"},"nodeType":"ModifierInvocation","src":"5985:28:2"},{"id":811,"kind":"modifierInvocation","modifierName":{"id":810,"name":"whenNotPaused","nameLocations":["6022:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"6022:13:2"},"nodeType":"ModifierInvocation","src":"6022:13:2"},{"id":813,"kind":"modifierInvocation","modifierName":{"id":812,"name":"nonReentrant","nameLocations":["6044:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"6044:12:2"},"nodeType":"ModifierInvocation","src":"6044:12:2"}],"name":"executeWithERC20","nameLocation":"5843:16:2","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"token","nameLocation":"5877:5:2","nodeType":"VariableDeclaration","scope":897,"src":"5869:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":798,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":801,"mutability":"mutable","name":"to","nameLocation":"5900:2:2","nodeType":"VariableDeclaration","scope":897,"src":"5892:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":800,"name":"address","nodeType":"ElementaryTypeName","src":"5892:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":803,"mutability":"mutable","name":"amount","nameLocation":"5920:6:2","nodeType":"VariableDeclaration","scope":897,"src":"5912:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":805,"mutability":"mutable","name":"data","nameLocation":"5951:4:2","nodeType":"VariableDeclaration","scope":897,"src":"5936:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":804,"name":"bytes","nodeType":"ElementaryTypeName","src":"5936:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5859:102:2"},"returnParameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"6061:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":963,"nodeType":"FunctionDefinition","src":"7290:562:2","nodes":[],"body":{"id":962,"nodeType":"Block","src":"7564:288:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":919,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7578:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7588:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7578:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":925,"nodeType":"IfStatement","src":"7574:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":922,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"7598:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7598:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":924,"nodeType":"RevertStatement","src":"7591:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":926,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7637:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7651:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7643:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":927,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:2","typeDescriptions":{}}},"id":930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7643:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7637:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":935,"nodeType":"IfStatement","src":"7633:42:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":932,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"7662:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7662:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":934,"nodeType":"RevertStatement","src":"7655:20:2"}},{"expression":{"arguments":[{"arguments":[{"id":942,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7721:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7713:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":940,"name":"address","nodeType":"ElementaryTypeName","src":"7713:7:2","typeDescriptions":{}}},"id":943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7713:11:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":944,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7726:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":937,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":900,"src":"7693:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":936,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"7686:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7686:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7700:12:2","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":47224,"src":"7686:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,uint256)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7686:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":946,"nodeType":"ExpressionStatement","src":"7686:47:2"},{"expression":{"arguments":[{"id":951,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"7767:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":948,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7754:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":947,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"7743:10:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Revertable_$30_$","typeString":"type(contract Revertable)"}},"id":949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7743:14:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Revertable_$30","typeString":"contract Revertable"}},"id":950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7758:8:2","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":29,"src":"7743:23:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7743:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":953,"nodeType":"ExpressionStatement","src":"7743:38:2"},{"eventCall":{"arguments":[{"id":955,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7806:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":900,"src":"7810:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":957,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7817:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":958,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":906,"src":"7825:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":959,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"7831:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"id":954,"name":"Reverted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"7797:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory,struct RevertContext memory)"}},"id":960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7797:48:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":961,"nodeType":"EmitStatement","src":"7792:53:2"}]},"baseFunctions":[2355],"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"6872:413:2","text":"@notice Directly transfers ERC20 tokens and calls onRevert.\n @dev This function can only be called by the custody or connector address.\n @param token Address of the ERC20 token.\n @param to Address of the contract to call.\n @param amount Amount of tokens to transfer.\n @param data Calldata to pass to the call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"d0b492c3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":912,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"7497:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":913,"kind":"modifierInvocation","modifierName":{"id":911,"name":"onlyRole","nameLocations":["7488:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"7488:8:2"},"nodeType":"ModifierInvocation","src":"7488:28:2"},{"id":915,"kind":"modifierInvocation","modifierName":{"id":914,"name":"whenNotPaused","nameLocations":["7525:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"7525:13:2"},"nodeType":"ModifierInvocation","src":"7525:13:2"},{"id":917,"kind":"modifierInvocation","modifierName":{"id":916,"name":"nonReentrant","nameLocations":["7547:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"7547:12:2"},"nodeType":"ModifierInvocation","src":"7547:12:2"}],"name":"revertWithERC20","nameLocation":"7299:15:2","parameters":{"id":910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"token","nameLocation":"7332:5:2","nodeType":"VariableDeclaration","scope":963,"src":"7324:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"7324:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":902,"mutability":"mutable","name":"to","nameLocation":"7355:2:2","nodeType":"VariableDeclaration","scope":963,"src":"7347:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":901,"name":"address","nodeType":"ElementaryTypeName","src":"7347:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":904,"mutability":"mutable","name":"amount","nameLocation":"7375:6:2","nodeType":"VariableDeclaration","scope":963,"src":"7367:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":903,"name":"uint256","nodeType":"ElementaryTypeName","src":"7367:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":906,"mutability":"mutable","name":"data","nameLocation":"7406:4:2","nodeType":"VariableDeclaration","scope":963,"src":"7391:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":905,"name":"bytes","nodeType":"ElementaryTypeName","src":"7391:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":909,"mutability":"mutable","name":"revertContext","nameLocation":"7443:13:2","nodeType":"VariableDeclaration","scope":963,"src":"7420:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":908,"nodeType":"UserDefinedTypeName","pathNode":{"id":907,"name":"RevertContext","nameLocations":["7420:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"7420:13:2"},"referencedDeclaration":21,"src":"7420:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"7314:148:2"},"returnParameters":{"id":918,"nodeType":"ParameterList","parameters":[],"src":"7564:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1025,"nodeType":"FunctionDefinition","src":"8001:508:2","nodes":[],"body":{"id":1024,"nodeType":"Block","src":"8176:333:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":976,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8190:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8194:5:2","memberName":"value","nodeType":"MemberAccess","src":"8190:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8203:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8190:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":983,"nodeType":"IfStatement","src":"8186:50:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":980,"name":"InsufficientETHAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"8213:21:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8213:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":982,"nodeType":"RevertStatement","src":"8206:30:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":984,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8250:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8270:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8262:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":985,"name":"address","nodeType":"ElementaryTypeName","src":"8262:7:2","typeDescriptions":{}}},"id":988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8262:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8250:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":993,"nodeType":"IfStatement","src":"8246:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":990,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"8281:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8281:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":992,"nodeType":"RevertStatement","src":"8274:20:2"}},{"assignments":[995,null],"declarations":[{"constant":false,"id":995,"mutability":"mutable","name":"deposited","nameLocation":"8311:9:2","nodeType":"VariableDeclaration","scope":1024,"src":"8306:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":994,"name":"bool","nodeType":"ElementaryTypeName","src":"8306:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1003,"initialValue":{"arguments":[{"hexValue":"","id":1001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8361:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":996,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"8325:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8336:4:2","memberName":"call","nodeType":"MemberAccess","src":"8325:15:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":998,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8349:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8353:5:2","memberName":"value","nodeType":"MemberAccess","src":"8349:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8325:35:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8325:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"8305:59:2"},{"condition":{"id":1005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8379:10:2","subExpression":{"id":1004,"name":"deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":995,"src":"8380:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1009,"nodeType":"IfStatement","src":"8375:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1006,"name":"DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"8398:13:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8398:15:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1008,"nodeType":"RevertStatement","src":"8391:22:2"}},{"eventCall":{"arguments":[{"expression":{"id":1011,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8439:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8443:6:2","memberName":"sender","nodeType":"MemberAccess","src":"8439:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1013,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8451:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":1014,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8461:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8465:5:2","memberName":"value","nodeType":"MemberAccess","src":"8461:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":1018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8480:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8472:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1016,"name":"address","nodeType":"ElementaryTypeName","src":"8472:7:2","typeDescriptions":{}}},"id":1019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8472:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":1020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8484:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":1021,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":969,"src":"8488:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1010,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"8429:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8429:73:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1023,"nodeType":"EmitStatement","src":"8424:78:2"}]},"baseFunctions":[2364],"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"7858:138:2","text":"@notice Deposits ETH to the TSS address.\n @param receiver Address of the receiver.\n @param revertOptions Revert options."},"functionSelector":"726ac97c","implemented":true,"kind":"function","modifiers":[{"id":972,"kind":"modifierInvocation","modifierName":{"id":971,"name":"whenNotPaused","nameLocations":["8137:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8137:13:2"},"nodeType":"ModifierInvocation","src":"8137:13:2"},{"id":974,"kind":"modifierInvocation","modifierName":{"id":973,"name":"nonReentrant","nameLocations":["8159:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8159:12:2"},"nodeType":"ModifierInvocation","src":"8159:12:2"}],"name":"deposit","nameLocation":"8010:7:2","parameters":{"id":970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"receiver","nameLocation":"8035:8:2","nodeType":"VariableDeclaration","scope":1025,"src":"8027:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"8027:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":969,"mutability":"mutable","name":"revertOptions","nameLocation":"8076:13:2","nodeType":"VariableDeclaration","scope":1025,"src":"8053:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":968,"nodeType":"UserDefinedTypeName","pathNode":{"id":967,"name":"RevertOptions","nameLocations":["8053:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8053:13:2"},"referencedDeclaration":13,"src":"8053:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8017:78:2"},"returnParameters":{"id":975,"nodeType":"ParameterList","parameters":[],"src":"8176:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":1077,"nodeType":"FunctionDefinition","src":"8785:475:2","nodes":[],"body":{"id":1076,"nodeType":"Block","src":"8991:269:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1042,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9005:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9015:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9005:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1048,"nodeType":"IfStatement","src":"9001:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1045,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"9025:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9025:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1047,"nodeType":"RevertStatement","src":"9018:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1049,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"9064:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9084:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9076:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1050,"name":"address","nodeType":"ElementaryTypeName","src":"9076:7:2","typeDescriptions":{}}},"id":1053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9076:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9064:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1058,"nodeType":"IfStatement","src":"9060:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1055,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"9095:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9095:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1057,"nodeType":"RevertStatement","src":"9088:20:2"}},{"expression":{"arguments":[{"expression":{"id":1060,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9146:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9150:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9146:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1062,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9158:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1063,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9165:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1059,"name":"transferFromToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1394,"src":"9119:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9119:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1065,"nodeType":"ExpressionStatement","src":"9119:53:2"},{"eventCall":{"arguments":[{"expression":{"id":1067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9198:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9202:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9198:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1069,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"9210:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1070,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9220:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1071,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9228:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":1072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9235:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":1073,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1035,"src":"9239:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1066,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"9188:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9188:65:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1075,"nodeType":"EmitStatement","src":"9183:70:2"}]},"baseFunctions":[2377],"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"8515:265:2","text":"@notice Deposits ERC20 tokens to the custody or connector contract.\n @param receiver Address of the receiver.\n @param amount Amount of tokens to deposit.\n @param asset Address of the ERC20 token.\n @param revertOptions Revert options."},"functionSelector":"102614b0","implemented":true,"kind":"function","modifiers":[{"id":1038,"kind":"modifierInvocation","modifierName":{"id":1037,"name":"whenNotPaused","nameLocations":["8952:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8952:13:2"},"nodeType":"ModifierInvocation","src":"8952:13:2"},{"id":1040,"kind":"modifierInvocation","modifierName":{"id":1039,"name":"nonReentrant","nameLocations":["8974:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8974:12:2"},"nodeType":"ModifierInvocation","src":"8974:12:2"}],"name":"deposit","nameLocation":"8794:7:2","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"receiver","nameLocation":"8819:8:2","nodeType":"VariableDeclaration","scope":1077,"src":"8811:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"8811:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1030,"mutability":"mutable","name":"amount","nameLocation":"8845:6:2","nodeType":"VariableDeclaration","scope":1077,"src":"8837:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1029,"name":"uint256","nodeType":"ElementaryTypeName","src":"8837:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1032,"mutability":"mutable","name":"asset","nameLocation":"8869:5:2","nodeType":"VariableDeclaration","scope":1077,"src":"8861:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1031,"name":"address","nodeType":"ElementaryTypeName","src":"8861:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1035,"mutability":"mutable","name":"revertOptions","nameLocation":"8907:13:2","nodeType":"VariableDeclaration","scope":1077,"src":"8884:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1034,"nodeType":"UserDefinedTypeName","pathNode":{"id":1033,"name":"RevertOptions","nameLocations":["8884:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8884:13:2"},"referencedDeclaration":13,"src":"8884:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8801:125:2"},"returnParameters":{"id":1041,"nodeType":"ParameterList","parameters":[],"src":"8991:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1141,"nodeType":"FunctionDefinition","src":"9500:552:2","nodes":[],"body":{"id":1140,"nodeType":"Block","src":"9714:338:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1092,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9728:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9732:5:2","memberName":"value","nodeType":"MemberAccess","src":"9728:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9741:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9728:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1099,"nodeType":"IfStatement","src":"9724:50:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1096,"name":"InsufficientETHAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"9751:21:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9751:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1098,"nodeType":"RevertStatement","src":"9744:30:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1100,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1080,"src":"9788:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9808:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9800:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1101,"name":"address","nodeType":"ElementaryTypeName","src":"9800:7:2","typeDescriptions":{}}},"id":1104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9800:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9788:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1109,"nodeType":"IfStatement","src":"9784:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1106,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"9819:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1108,"nodeType":"RevertStatement","src":"9812:20:2"}},{"assignments":[1111,null],"declarations":[{"constant":false,"id":1111,"mutability":"mutable","name":"deposited","nameLocation":"9849:9:2","nodeType":"VariableDeclaration","scope":1140,"src":"9844:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1110,"name":"bool","nodeType":"ElementaryTypeName","src":"9844:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1119,"initialValue":{"arguments":[{"hexValue":"","id":1117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9899:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":1112,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"9863:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9874:4:2","memberName":"call","nodeType":"MemberAccess","src":"9863:15:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":1114,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9887:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9891:5:2","memberName":"value","nodeType":"MemberAccess","src":"9887:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9863:35:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9863:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9843:59:2"},{"condition":{"id":1121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9917:10:2","subExpression":{"id":1120,"name":"deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"9918:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1125,"nodeType":"IfStatement","src":"9913:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1122,"name":"DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"9936:13:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9936:15:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1124,"nodeType":"RevertStatement","src":"9929:22:2"}},{"eventCall":{"arguments":[{"expression":{"id":1127,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9977:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9981:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9977:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1129,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1080,"src":"9989:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":1130,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9999:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10003:5:2","memberName":"value","nodeType":"MemberAccess","src":"9999:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":1134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10018:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10010:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1132,"name":"address","nodeType":"ElementaryTypeName","src":"10010:7:2","typeDescriptions":{}}},"id":1135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10010:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1136,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1082,"src":"10022:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1137,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1085,"src":"10031:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1126,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"9967:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9967:78:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1139,"nodeType":"EmitStatement","src":"9962:83:2"}]},"baseFunctions":[2388],"documentation":{"id":1078,"nodeType":"StructuredDocumentation","src":"9266:229:2","text":"@notice Deposits ETH to the TSS address and calls an omnichain smart contract.\n @param receiver Address of the receiver.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"744b9b8b","implemented":true,"kind":"function","modifiers":[{"id":1088,"kind":"modifierInvocation","modifierName":{"id":1087,"name":"whenNotPaused","nameLocations":["9675:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"9675:13:2"},"nodeType":"ModifierInvocation","src":"9675:13:2"},{"id":1090,"kind":"modifierInvocation","modifierName":{"id":1089,"name":"nonReentrant","nameLocations":["9697:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"9697:12:2"},"nodeType":"ModifierInvocation","src":"9697:12:2"}],"name":"depositAndCall","nameLocation":"9509:14:2","parameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1080,"mutability":"mutable","name":"receiver","nameLocation":"9541:8:2","nodeType":"VariableDeclaration","scope":1141,"src":"9533:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1079,"name":"address","nodeType":"ElementaryTypeName","src":"9533:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1082,"mutability":"mutable","name":"payload","nameLocation":"9574:7:2","nodeType":"VariableDeclaration","scope":1141,"src":"9559:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1081,"name":"bytes","nodeType":"ElementaryTypeName","src":"9559:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1085,"mutability":"mutable","name":"revertOptions","nameLocation":"9614:13:2","nodeType":"VariableDeclaration","scope":1141,"src":"9591:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"RevertOptions","nameLocations":["9591:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"9591:13:2"},"referencedDeclaration":13,"src":"9591:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"9523:110:2"},"returnParameters":{"id":1091,"nodeType":"ParameterList","parameters":[],"src":"9714:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":1195,"nodeType":"FunctionDefinition","src":"10419:519:2","nodes":[],"body":{"id":1194,"nodeType":"Block","src":"10664:274:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10678:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10688:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10678:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1166,"nodeType":"IfStatement","src":"10674:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1163,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"10698:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10698:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1165,"nodeType":"RevertStatement","src":"10691:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1167,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"10737:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10757:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10749:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1168,"name":"address","nodeType":"ElementaryTypeName","src":"10749:7:2","typeDescriptions":{}}},"id":1171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10749:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10737:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1176,"nodeType":"IfStatement","src":"10733:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1173,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"10768:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10768:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1175,"nodeType":"RevertStatement","src":"10761:20:2"}},{"expression":{"arguments":[{"expression":{"id":1178,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10819:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10823:6:2","memberName":"sender","nodeType":"MemberAccess","src":"10819:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1180,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"10831:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1181,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10838:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1177,"name":"transferFromToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1394,"src":"10792:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10792:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1183,"nodeType":"ExpressionStatement","src":"10792:53:2"},{"eventCall":{"arguments":[{"expression":{"id":1185,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10871:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10875:6:2","memberName":"sender","nodeType":"MemberAccess","src":"10871:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1187,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"10883:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1188,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10893:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1189,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"10901:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1190,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"10908:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1191,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1153,"src":"10917:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1184,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"10861:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10861:70:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1193,"nodeType":"EmitStatement","src":"10856:75:2"}]},"baseFunctions":[2403],"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"10058:356:2","text":"@notice Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract.\n @param receiver Address of the receiver.\n @param amount Amount of tokens to deposit.\n @param asset Address of the ERC20 token.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"d09e3b78","implemented":true,"kind":"function","modifiers":[{"id":1156,"kind":"modifierInvocation","modifierName":{"id":1155,"name":"whenNotPaused","nameLocations":["10625:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"10625:13:2"},"nodeType":"ModifierInvocation","src":"10625:13:2"},{"id":1158,"kind":"modifierInvocation","modifierName":{"id":1157,"name":"nonReentrant","nameLocations":["10647:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"10647:12:2"},"nodeType":"ModifierInvocation","src":"10647:12:2"}],"name":"depositAndCall","nameLocation":"10428:14:2","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"mutability":"mutable","name":"receiver","nameLocation":"10460:8:2","nodeType":"VariableDeclaration","scope":1195,"src":"10452:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"10452:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"mutability":"mutable","name":"amount","nameLocation":"10486:6:2","nodeType":"VariableDeclaration","scope":1195,"src":"10478:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1145,"name":"uint256","nodeType":"ElementaryTypeName","src":"10478:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1148,"mutability":"mutable","name":"asset","nameLocation":"10510:5:2","nodeType":"VariableDeclaration","scope":1195,"src":"10502:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1147,"name":"address","nodeType":"ElementaryTypeName","src":"10502:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1150,"mutability":"mutable","name":"payload","nameLocation":"10540:7:2","nodeType":"VariableDeclaration","scope":1195,"src":"10525:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1149,"name":"bytes","nodeType":"ElementaryTypeName","src":"10525:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1153,"mutability":"mutable","name":"revertOptions","nameLocation":"10580:13:2","nodeType":"VariableDeclaration","scope":1195,"src":"10557:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1152,"nodeType":"UserDefinedTypeName","pathNode":{"id":1151,"name":"RevertOptions","nameLocations":["10557:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"10557:13:2"},"referencedDeclaration":13,"src":"10557:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"10442:157:2"},"returnParameters":{"id":1159,"nodeType":"ParameterList","parameters":[],"src":"10664:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1229,"nodeType":"FunctionDefinition","src":"11165:320:2","nodes":[],"body":{"id":1228,"nodeType":"Block","src":"11353:132:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1210,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"11367:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11387:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11379:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1211,"name":"address","nodeType":"ElementaryTypeName","src":"11379:7:2","typeDescriptions":{}}},"id":1214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11379:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11367:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1219,"nodeType":"IfStatement","src":"11363:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1216,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"11398:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11398:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1218,"nodeType":"RevertStatement","src":"11391:20:2"}},{"eventCall":{"arguments":[{"expression":{"id":1221,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11433:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11437:6:2","memberName":"sender","nodeType":"MemberAccess","src":"11433:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1223,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"11445:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1224,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1200,"src":"11455:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1225,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"11464:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1220,"name":"Called","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2272,"src":"11426:6:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,struct RevertOptions memory)"}},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11426:52:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1227,"nodeType":"EmitStatement","src":"11421:57:2"}]},"baseFunctions":[2414],"documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"10944:216:2","text":"@notice Calls an omnichain smart contract without asset transfer.\n @param receiver Address of the receiver.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"1becceb4","implemented":true,"kind":"function","modifiers":[{"id":1206,"kind":"modifierInvocation","modifierName":{"id":1205,"name":"whenNotPaused","nameLocations":["11314:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11314:13:2"},"nodeType":"ModifierInvocation","src":"11314:13:2"},{"id":1208,"kind":"modifierInvocation","modifierName":{"id":1207,"name":"nonReentrant","nameLocations":["11336:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"11336:12:2"},"nodeType":"ModifierInvocation","src":"11336:12:2"}],"name":"call","nameLocation":"11174:4:2","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1198,"mutability":"mutable","name":"receiver","nameLocation":"11196:8:2","nodeType":"VariableDeclaration","scope":1229,"src":"11188:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"11188:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1200,"mutability":"mutable","name":"payload","nameLocation":"11229:7:2","nodeType":"VariableDeclaration","scope":1229,"src":"11214:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1199,"name":"bytes","nodeType":"ElementaryTypeName","src":"11214:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1203,"mutability":"mutable","name":"revertOptions","nameLocation":"11269:13:2","nodeType":"VariableDeclaration","scope":1229,"src":"11246:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1202,"nodeType":"UserDefinedTypeName","pathNode":{"id":1201,"name":"RevertOptions","nameLocations":["11246:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"11246:13:2"},"referencedDeclaration":13,"src":"11246:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"11178:110:2"},"returnParameters":{"id":1209,"nodeType":"ParameterList","parameters":[],"src":"11353:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1268,"nodeType":"FunctionDefinition","src":"11599:284:2","nodes":[],"body":{"id":1267,"nodeType":"Block","src":"11675:208:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1238,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11689:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11709:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11701:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1239,"name":"address","nodeType":"ElementaryTypeName","src":"11701:7:2","typeDescriptions":{}}},"id":1242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11701:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11689:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1247,"nodeType":"IfStatement","src":"11685:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1244,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"11720:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11720:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1246,"nodeType":"RevertStatement","src":"11713:20:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1248,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"11747:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11766:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11758:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1249,"name":"address","nodeType":"ElementaryTypeName","src":"11758:7:2","typeDescriptions":{}}},"id":1252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11758:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11747:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1257,"nodeType":"IfStatement","src":"11743:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1254,"name":"CustodyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"11777:18:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11777:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1256,"nodeType":"RevertStatement","src":"11770:27:2"}},{"expression":{"arguments":[{"id":1259,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"11819:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1260,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11839:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1258,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"11808:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11808:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1262,"nodeType":"ExpressionStatement","src":"11808:40:2"},{"expression":{"id":1265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1263,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"11858:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1264,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11868:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11858:18:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1266,"nodeType":"ExpressionStatement","src":"11858:18:2"}]},"documentation":{"id":1230,"nodeType":"StructuredDocumentation","src":"11491:103:2","text":"@notice Sets the custody contract address.\n @param custody_ Address of the custody contract."},"functionSelector":"ae7a3a6f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1235,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"11655:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1236,"kind":"modifierInvocation","modifierName":{"id":1234,"name":"onlyRole","nameLocations":["11646:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"11646:8:2"},"nodeType":"ModifierInvocation","src":"11646:28:2"}],"name":"setCustody","nameLocation":"11608:10:2","parameters":{"id":1233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1232,"mutability":"mutable","name":"custody_","nameLocation":"11627:8:2","nodeType":"VariableDeclaration","scope":1268,"src":"11619:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1231,"name":"address","nodeType":"ElementaryTypeName","src":"11619:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11618:18:2"},"returnParameters":{"id":1237,"nodeType":"ParameterList","parameters":[],"src":"11675:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1307,"nodeType":"FunctionDefinition","src":"12007:324:2","nodes":[],"body":{"id":1306,"nodeType":"Block","src":"12091:240:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1277,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12105:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12131:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12123:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1278,"name":"address","nodeType":"ElementaryTypeName","src":"12123:7:2","typeDescriptions":{}}},"id":1281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12123:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12105:28:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1286,"nodeType":"IfStatement","src":"12101:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1283,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"12142:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12142:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1285,"nodeType":"RevertStatement","src":"12135:20:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1287,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"12169:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12194:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12186:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"12186:7:2","typeDescriptions":{}}},"id":1291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12186:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12169:27:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1296,"nodeType":"IfStatement","src":"12165:62:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1293,"name":"ConnectorInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"12205:20:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12205:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1295,"nodeType":"RevertStatement","src":"12198:29:2"}},{"expression":{"arguments":[{"id":1298,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"12249:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1299,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12269:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1297,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"12238:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12238:46:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1301,"nodeType":"ExpressionStatement","src":"12238:46:2"},{"expression":{"id":1304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1302,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"12294:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1303,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12310:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12294:30:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1305,"nodeType":"ExpressionStatement","src":"12294:30:2"}]},"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"11889:113:2","text":"@notice Sets the connector contract address.\n @param zetaConnector_ Address of the connector contract."},"functionSelector":"10188aef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1274,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"12071:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1275,"kind":"modifierInvocation","modifierName":{"id":1273,"name":"onlyRole","nameLocations":["12062:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"12062:8:2"},"nodeType":"ModifierInvocation","src":"12062:28:2"}],"name":"setConnector","nameLocation":"12016:12:2","parameters":{"id":1272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1271,"mutability":"mutable","name":"zetaConnector_","nameLocation":"12037:14:2","nodeType":"VariableDeclaration","scope":1307,"src":"12029:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1270,"name":"address","nodeType":"ElementaryTypeName","src":"12029:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12028:24:2"},"returnParameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"12091:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1326,"nodeType":"FunctionDefinition","src":"12682:125:2","nodes":[],"body":{"id":1325,"nodeType":"Block","src":"12755:52:2","nodes":[],"statements":[{"expression":{"arguments":[{"id":1321,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"12794:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12798:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":1318,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1310,"src":"12779:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1317,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"12772:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12772:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12786:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"12772:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12772:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1316,"id":1324,"nodeType":"Return","src":"12765:35:2"}]},"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"12337:340:2","text":"@dev Resets the approval of a token for a specified address.\n This is used to ensure that the approval is set to zero before setting it to a new value.\n @param token Address of the ERC20 token.\n @param to Address to reset the approval for.\n @return True if the approval reset was successful, false otherwise."},"implemented":true,"kind":"function","modifiers":[],"name":"resetApproval","nameLocation":"12691:13:2","parameters":{"id":1313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"token","nameLocation":"12713:5:2","nodeType":"VariableDeclaration","scope":1326,"src":"12705:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1309,"name":"address","nodeType":"ElementaryTypeName","src":"12705:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1312,"mutability":"mutable","name":"to","nameLocation":"12728:2:2","nodeType":"VariableDeclaration","scope":1326,"src":"12720:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1311,"name":"address","nodeType":"ElementaryTypeName","src":"12720:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12704:27:2"},"returnParameters":{"id":1316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1326,"src":"12749:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1314,"name":"bool","nodeType":"ElementaryTypeName","src":"12749:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12748:6:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":1394,"nodeType":"FunctionDefinition","src":"13155:801:2","nodes":[],"body":{"id":1393,"nodeType":"Block","src":"13244:712:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1336,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13258:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1337,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"13267:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13258:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1391,"nodeType":"Block","src":"13743:207:2","statements":[{"condition":{"id":1377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13796:42:2","subExpression":{"arguments":[{"id":1375,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13832:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":1372,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"13811:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1371,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"13797:13:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Custody_$2206_$","typeString":"type(contract IERC20Custody)"}},"id":1373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Custody_$2206","typeString":"contract IERC20Custody"}},"id":1374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13820:11:2","memberName":"whitelisted","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"13797:34:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":1376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1381,"nodeType":"IfStatement","src":"13792:80:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1378,"name":"NotWhitelistedInCustody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"13847:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13847:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1380,"nodeType":"RevertStatement","src":"13840:32:2"}},{"expression":{"arguments":[{"id":1386,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"13917:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1387,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"13923:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1388,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13932:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1383,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13893:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1382,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13886:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13886:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13900:16:2","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":47251,"src":"13886:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13886:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1390,"nodeType":"ExpressionStatement","src":"13886:53:2"}]},"id":1392,"nodeType":"IfStatement","src":"13254:696:2","trueBody":{"id":1370,"nodeType":"Block","src":"13278:459:2","statements":[{"expression":{"arguments":[{"id":1343,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"13402:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1346,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13416:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}],"id":1345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13408:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1344,"name":"address","nodeType":"ElementaryTypeName","src":"13408:7:2","typeDescriptions":{}}},"id":1347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13408:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1348,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13423:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1340,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13378:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1339,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13371:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13385:16:2","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":47251,"src":"13371:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:59:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1350,"nodeType":"ExpressionStatement","src":"13371:59:2"},{"condition":{"id":1358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13548:45:2","subExpression":{"arguments":[{"id":1355,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"13571:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1356,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13586:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1352,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13556:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1351,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13549:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13563:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"13549:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1362,"nodeType":"IfStatement","src":"13544:74:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1359,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"13602:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13602:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1361,"nodeType":"RevertStatement","src":"13595:23:2"}},{"expression":{"arguments":[{"id":1367,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13719:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1364,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"13690:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1363,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"13672:17:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ZetaConnectorBase_$1644_$","typeString":"type(contract ZetaConnectorBase)"}},"id":1365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13672:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ZetaConnectorBase_$1644","typeString":"contract ZetaConnectorBase"}},"id":1366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13705:13:2","memberName":"receiveTokens","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"13672:46:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":1368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13672:54:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1369,"nodeType":"ExpressionStatement","src":"13672:54:2"}]}}]},"documentation":{"id":1327,"nodeType":"StructuredDocumentation","src":"12813:337:2","text":"@dev Transfers tokens from the sender to the asset handler.\n This function handles the transfer of tokens to either the connector or custody contract based on the asset\n type.\n @param from Address of the sender.\n @param token Address of the ERC20 token.\n @param amount Amount of tokens to transfer."},"implemented":true,"kind":"function","modifiers":[],"name":"transferFromToAssetHandler","nameLocation":"13164:26:2","parameters":{"id":1334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1329,"mutability":"mutable","name":"from","nameLocation":"13199:4:2","nodeType":"VariableDeclaration","scope":1394,"src":"13191:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1328,"name":"address","nodeType":"ElementaryTypeName","src":"13191:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1331,"mutability":"mutable","name":"token","nameLocation":"13213:5:2","nodeType":"VariableDeclaration","scope":1394,"src":"13205:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1330,"name":"address","nodeType":"ElementaryTypeName","src":"13205:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1333,"mutability":"mutable","name":"amount","nameLocation":"13228:6:2","nodeType":"VariableDeclaration","scope":1394,"src":"13220:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1332,"name":"uint256","nodeType":"ElementaryTypeName","src":"13220:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13190:45:2"},"returnParameters":{"id":1335,"nodeType":"ParameterList","parameters":[],"src":"13244:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":1447,"nodeType":"FunctionDefinition","src":"14245:658:2","nodes":[],"body":{"id":1446,"nodeType":"Block","src":"14316:587:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1402,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14330:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1403,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"14339:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14330:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1444,"nodeType":"Block","src":"14700:197:2","statements":[{"condition":{"id":1431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14753:42:2","subExpression":{"arguments":[{"id":1429,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14789:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":1426,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"14768:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1425,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"14754:13:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Custody_$2206_$","typeString":"type(contract IERC20Custody)"}},"id":1427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14754:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Custody_$2206","typeString":"contract IERC20Custody"}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14777:11:2","memberName":"whitelisted","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"14754:34:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":1430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14754:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1435,"nodeType":"IfStatement","src":"14749:80:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1432,"name":"NotWhitelistedInCustody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"14804:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14804:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1434,"nodeType":"RevertStatement","src":"14797:32:2"}},{"expression":{"arguments":[{"id":1440,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"14870:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1441,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14879:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1437,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14850:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1436,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"14843:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14857:12:2","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":47224,"src":"14843:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,uint256)"}},"id":1442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1443,"nodeType":"ExpressionStatement","src":"14843:43:2"}]},"id":1445,"nodeType":"IfStatement","src":"14326:571:2","trueBody":{"id":1424,"nodeType":"Block","src":"14350:344:2","statements":[{"condition":{"id":1412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14505:45:2","subExpression":{"arguments":[{"id":1409,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"14528:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1410,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14543:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1406,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14513:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1405,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"14506:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14506:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14520:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"14506:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14506:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1416,"nodeType":"IfStatement","src":"14501:74:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1413,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"14559:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14559:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1415,"nodeType":"RevertStatement","src":"14552:23:2"}},{"expression":{"arguments":[{"id":1421,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14676:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1418,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"14647:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1417,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"14629:17:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ZetaConnectorBase_$1644_$","typeString":"type(contract ZetaConnectorBase)"}},"id":1419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14629:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ZetaConnectorBase_$1644","typeString":"contract ZetaConnectorBase"}},"id":1420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14662:13:2","memberName":"receiveTokens","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"14629:46:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":1422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14629:54:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1423,"nodeType":"ExpressionStatement","src":"14629:54:2"}]}}]},"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"13962:278:2","text":"@dev Transfers tokens to the asset handler.\n This function handles the transfer of tokens to either the connector or custody contract based on the asset\n type.\n @param token Address of the ERC20 token.\n @param amount Amount of tokens to transfer."},"implemented":true,"kind":"function","modifiers":[],"name":"transferToAssetHandler","nameLocation":"14254:22:2","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"token","nameLocation":"14285:5:2","nodeType":"VariableDeclaration","scope":1447,"src":"14277:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1396,"name":"address","nodeType":"ElementaryTypeName","src":"14277:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"amount","nameLocation":"14300:6:2","nodeType":"VariableDeclaration","scope":1447,"src":"14292:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint256","nodeType":"ElementaryTypeName","src":"14292:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14276:31:2"},"returnParameters":{"id":1401,"nodeType":"ParameterList","parameters":[],"src":"14316:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":505,"name":"Initializable","nameLocations":["1080:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44489,"src":"1080:13:2"},"id":506,"nodeType":"InheritanceSpecifier","src":"1080:13:2"},{"baseName":{"id":507,"name":"AccessControlUpgradeable","nameLocations":["1099:24:2"],"nodeType":"IdentifierPath","referencedDeclaration":44235,"src":"1099:24:2"},"id":508,"nodeType":"InheritanceSpecifier","src":"1099:24:2"},{"baseName":{"id":509,"name":"UUPSUpgradeable","nameLocations":["1129:15:2"],"nodeType":"IdentifierPath","referencedDeclaration":44671,"src":"1129:15:2"},"id":510,"nodeType":"InheritanceSpecifier","src":"1129:15:2"},{"baseName":{"id":511,"name":"IGatewayEVM","nameLocations":["1150:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"1150:11:2"},"id":512,"nodeType":"InheritanceSpecifier","src":"1150:11:2"},{"baseName":{"id":513,"name":"ReentrancyGuardUpgradeable","nameLocations":["1167:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":45022,"src":"1167:26:2"},"id":514,"nodeType":"InheritanceSpecifier","src":"1167:26:2"},{"baseName":{"id":515,"name":"PausableUpgradeable","nameLocations":["1199:19:2"],"nodeType":"IdentifierPath","referencedDeclaration":44893,"src":"1199:19:2"},"id":516,"nodeType":"InheritanceSpecifier","src":"1199:19:2"}],"canonicalName":"GatewayEVM","contractDependencies":[],"contractKind":"contract","documentation":{"id":504,"nodeType":"StructuredDocumentation","src":"849:204:2","text":"@title GatewayEVM\n @notice The GatewayEVM contract is the endpoint to call smart contracts on external chains.\n @dev The contract doesn't hold any funds and should never have active allowances."},"fullyImplemented":true,"linearizedBaseContracts":[1448,44893,45022,2415,2273,2302,44671,45620,44235,45062,48334,45441,44717,44489],"name":"GatewayEVM","nameLocation":"1062:10:2","scope":1449,"usedErrors":[2277,2280,2283,2286,2289,2292,2295,2298,2301,44252,44255,44516,44521,44756,44759,44924,45368,45371,45830,45843,47191,47472,47477,47480],"usedEvents":[2219,2233,2244,2260,2272,44260,44748,44753,45380,45389,45398,45809]}],"license":"MIT"},"id":2} \ No newline at end of file diff --git a/packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json b/packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json new file mode 100644 index 00000000..13e05ecb --- /dev/null +++ b/packages/tasks/src/abi/GatewayZEVM.sol/GatewayZEVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNGIBLE_MODULE_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PAUSER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"call","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndRevert","inputs":[{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executeRevert","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"zetaToken_","type":"address","internalType":"address"},{"name":"admin_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAndCall","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAndCall","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"zetaToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Called","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"zrc20","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"chainId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"receiver","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"zrc20","type":"address","indexed":false,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasfee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EmptyMessage","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"FailedZetaSent","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InsufficientZRC20Amount","inputs":[]},{"type":"error","name":"InsufficientZetaAmount","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidTarget","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OnlyWZETAOrFungible","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"WithdrawalFailed","inputs":[]},{"type":"error","name":"ZRC20BurnFailed","inputs":[]},{"type":"error","name":"ZRC20DepositFailed","inputs":[]},{"type":"error","name":"ZRC20TransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161393d6100fd600039600081816125ef0152818161261801526127ee015261393d6000f3fe6080604052600436106101bb5760003560e01c806352d1902d116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637c0dcb5f116100c65780637c0dcb5f146104bb5780638456cb59146104db57806391d14854146104f057806397a1cef11461055557600080fd5b806352d1902d1461044f5780635c975abb14610464578063717d335f1461049b57600080fd5b80632f2ff15d116101595780633ce4a5bc116101335780633ce4a5bc146103df5780633f4ba83a14610407578063485cc9551461041c5780634f1ef2861461043c57600080fd5b80632f2ff15d1461037f57806336568abe1461039f5780633b283933146103bf57600080fd5b80631cb5ea75116101955780631cb5ea75146102aa57806321501a95146102ca57806321e093b1146102ea578063248a9ca31461032257600080fd5b806301ffc9a7146102355780630310eb761461026a578063048ae42c1461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612d37565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612da6565b61078b565b34801561029657600080fd5b5061022e6102a5366004612f68565b610a17565b3480156102b657600080fd5b5061022e6102c5366004613028565b610b92565b3480156102d657600080fd5b5061022e6102e53660046130dd565b610e03565b3480156102f657600080fd5b5060005461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032e57600080fd5b5061037161033d366004613169565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561038b57600080fd5b5061022e61039a366004613182565b610fd0565b3480156103ab57600080fd5b5061022e6103ba366004613182565b61101a565b3480156103cb57600080fd5b5061022e6103da3660046131b2565b61106b565b3480156103eb57600080fd5b5061030a73735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041357600080fd5b5061022e61118e565b34801561042857600080fd5b5061022e610437366004613245565b6111c3565b61022e61044a366004613273565b611418565b34801561045b57600080fd5b50610371611437565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b63660046132c3565b611466565b3480156104c757600080fd5b5061022e6104d6366004613309565b61156e565b3480156104e757600080fd5b5061022e61173c565b3480156104fc57600080fd5b5061025561050b366004613182565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b5061022e610570366004613382565b61176e565b34801561058157600080fd5b50610371600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190613454565b3480156105ec57600080fd5b5061022e6105fb366004613467565b61188d565b34801561060c57600080fd5b5061022e61061b366004613467565b6119bd565b34801561062c57600080fd5b5061022e61063b366004613182565b611bcc565b34801561064c57600080fd5b506103717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004613505565b611c10565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e0610694565b6001600160a01b03841615806107fd57506001600160a01b038216155b15610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361086e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108a157506001600160a01b03821630145b156108d8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190613555565b61099a576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109df90849060040161361f565b600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050505050505050565b610a1f611e1f565b610a27610694565b8651600003610a62576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610a9c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa9878785611ea0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e9190613685565b8c8c8c8c604051610b579998979695949392919061371f565b60405180910390a350610b8960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610b9a611e1f565b610ba2610694565b8551600003610bdd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003610c18576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613555565b610d7d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610dc89594939291906137c0565b60405180910390a35050610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e50576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e58610694565b6001600160a01b038316610e98576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610ed2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f0557506001600160a01b03831630145b15610f3c576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4684846121a3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610f97928a92169089908890889060040161380c565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461100a81612371565b611014838361237b565b50505050565b6001600160a01b038116331461105c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110668282612468565b505050565b611073611e1f565b61107b610694565b85516000036110b6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036110f0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e8573735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261115d928c926001600160a01b0316918c919081908c908c9083908d9061371f565b60405180910390a3610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b881612371565b6111c061252c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120e5750825b905060008267ffffffffffffffff16600114801561122b5750303b155b905081158015611239575080155b15611270576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112d15784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ee57506001600160a01b038616155b15611325576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132d6125bc565b6113356125bc565b61133d6125c4565b6113456125d4565b61135060008761237b565b5061137b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761237b565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610b895784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114206125e4565b611429826126b4565b61143382826126bf565b5050565b60006114416127e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab146114b3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114bb610694565b6001600160a01b0382166114fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061154090849060040161361f565b600060405180830381600087803b15801561155a57600080fd5b505af1158015610dfb573d6000803e3d6000fd5b611576611e1f565b61157e610694565b83516000036115b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036115f3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ff8484612845565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190613685565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613685565b8a60405161170a979695949392919061387d565b60405180910390a35061101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61176681612371565b6111c06128b3565b611776611e1f565b61177e610694565b83516000036117b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036117f3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118118373735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261185c928a926001600160a01b0316918a9190819081908b9061387d565b60405180910390a361101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118da576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2610694565b6001600160a01b03851615806118ff57506001600160a01b038316155b15611936576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611983908990899089908890889060040161380c565b600060405180830381600087803b15801561199d57600080fd5b505af11580156119b1573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a0a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a12610694565b6001600160a01b0385161580611a2f57506001600160a01b038316155b15611a66576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611aa0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611ad357506001600160a01b03831630145b15611b0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190613555565b611936576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c0681612371565b6110148383612468565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c65610694565b6001600160a01b0383161580611c8257506001600160a01b038116155b15611cb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611cf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d2657506001600160a01b03811630145b15611d5d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de99190613555565b611066576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611ed391815260200190565b6040805180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f139190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613555565b611ff2576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af115801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613555565b6120b8576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190613555565b612172576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613555565b61226d576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611066576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c0813361292c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661245e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561245e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6125346129b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612a14565b6125cc612a14565b6106f0612a7b565b6125dc612a14565b6106f0612acc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061267d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126717f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143381612371565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612737575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261273491810190613685565b60015b61277d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127d9576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612774565b6110668383612ad4565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121768383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae9190613685565b611ea0565b6128bb610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361259e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611433576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612774565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a83612a14565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61217d612a14565b612add82612b2a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b22576110668282612bd2565b611433612c48565b806001600160a01b03163b600003612b79576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612774565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bef91906138eb565b600060405180830381855af49150503d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b5091509150612c3f858383612c80565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612c9557612c9082612cf5565b612176565b8151158015612cac57506001600160a01b0384163b155b15612cee576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612774565b5080612176565b805115612d055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217657600080fd5b6001600160a01b03811681146111c057600080fd5b600060608284031215612da057600080fd5b50919050565b60008060008060808587031215612dbc57600080fd5b8435612dc781612d79565b9350602085013592506040850135612dde81612d79565b9150606085013567ffffffffffffffff811115612dfa57600080fd5b612e0687828801612d8e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5257600080fd5b813567ffffffffffffffff811115612e6c57612e6c612e12565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ed857612ed8612e12565b604052818152838201602001851015612ef057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f1f57600080fd5b50813567ffffffffffffffff811115612f3757600080fd5b602083019150836020828501011115612f4f57600080fd5b9250929050565b600060a08284031215612da057600080fd5b600080600080600080600060c0888a031215612f8357600080fd5b873567ffffffffffffffff811115612f9a57600080fd5b612fa68a828b01612e41565b975050602088013595506040880135612fbe81612d79565b9450606088013567ffffffffffffffff811115612fda57600080fd5b612fe68a828b01612f0d565b9095509350506080880135915060a088013567ffffffffffffffff81111561300d57600080fd5b6130198a828b01612f56565b91505092959891949750929550565b60008060008060008060a0878903121561304157600080fd5b863567ffffffffffffffff81111561305857600080fd5b61306489828a01612e41565b965050602087013561307581612d79565b9450604087013567ffffffffffffffff81111561309157600080fd5b61309d89828a01612f0d565b90955093505060608701359150608087013567ffffffffffffffff8111156130c457600080fd5b6130d089828a01612f56565b9150509295509295509295565b6000806000806000608086880312156130f557600080fd5b853567ffffffffffffffff81111561310c57600080fd5b61311888828901612d8e565b95505060208601359350604086013561313081612d79565b9250606086013567ffffffffffffffff81111561314c57600080fd5b61315888828901612f0d565b969995985093965092949392505050565b60006020828403121561317b57600080fd5b5035919050565b6000806040838503121561319557600080fd5b8235915060208301356131a781612d79565b809150509250929050565b60008060008060008060a087890312156131cb57600080fd5b863567ffffffffffffffff8111156131e257600080fd5b6131ee89828a01612e41565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561321957600080fd5b61322589828a01612f0d565b909450925050608087013567ffffffffffffffff8111156130c457600080fd5b6000806040838503121561325857600080fd5b823561326381612d79565b915060208301356131a781612d79565b6000806040838503121561328657600080fd5b823561329181612d79565b9150602083013567ffffffffffffffff8111156132ad57600080fd5b6132b985828601612e41565b9150509250929050565b600080604083850312156132d657600080fd5b82356132e181612d79565b9150602083013567ffffffffffffffff8111156132fd57600080fd5b6132b985828601612d8e565b6000806000806080858703121561331f57600080fd5b843567ffffffffffffffff81111561333657600080fd5b61334287828801612e41565b94505060208501359250604085013561335a81612d79565b9150606085013567ffffffffffffffff81111561337657600080fd5b612e0687828801612f56565b6000806000806080858703121561339857600080fd5b843567ffffffffffffffff8111156133af57600080fd5b6133bb87828801612e41565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561337657600080fd5b60005b838110156134015781810151838201526020016133e9565b50506000910152565b600081518084526134228160208601602086016133e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612176602083018461340a565b60008060008060008060a0878903121561348057600080fd5b863567ffffffffffffffff81111561349757600080fd5b6134a389828a01612d8e565b96505060208701356134b481612d79565b94506040870135935060608701356134cb81612d79565b9250608087013567ffffffffffffffff8111156134e757600080fd5b6134f389828a01612f0d565b979a9699509497509295939492505050565b60008060006060848603121561351a57600080fd5b833561352581612d79565b925060208401359150604084013561353c81612d79565b809150509250925092565b80151581146111c057600080fd5b60006020828403121561356757600080fd5b815161217681613547565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135a757600080fd5b830160208101925035905067ffffffffffffffff8111156135c757600080fd5b803603821315612f4f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561363081612d79565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461365c57600080fd5b80604085015250506136716040840184613572565b606080850152612c3f6080850182846135d6565b60006020828403121561369757600080fd5b5051919050565b600081356136ab81612d79565b6001600160a01b0316835260208201356136c481613547565b1515602084015260408201356136d981612d79565b6001600160a01b031660408401526136f46060830183613572565b60a0606086015261370960a0860182846135d6565b6080948501359590940194909452509092915050565b6101008152600061373461010083018c61340a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526137688187896135d6565b90508460c084015282810360e0840152613782818561369e565b9c9b505050505050505050505050565b600080604083850312156137a557600080fd5b82516137b081612d79565b6020939093015192949293505050565b6080815260006137d3608083018861340a565b82810360208401526137e68187896135d6565b90508460408401528281036060840152613800818561369e565b98975050505050505050565b60808152600061381c8788613572565b6060608085015261383160e0850182846135d6565b915050602088013561384281612d79565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138008185876135d6565b6101008152600061389261010083018a61340a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506138dd602082018561369e565b9a9950505050505050505050565b600082516138fd8184602087016133e6565b919091019291505056fea26469706673582212209729ede334f07afe016eab9b4d72c7ce168ef243ba933f0783bfed07e3f86edf64736f6c634300081a0033","sourceMap":"958:13493:10:-:0;;;1171:4:42;1128:48;;1851:53:10;;;;;;;;;-1:-1:-1;1875:22:10;:20;:22::i;:::-;958:13493;;7711:422:41;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:41;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:41;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:41;-1:-1:-1;;;;;8035:33:41;;;;;8087:29;;158:50:108;;;8087:29:41;;146:2:108;131:18;8087:29:41;;;;;;;7981:146;7760:373;7711:422::o;14:200:108:-;958:13493:10;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101bb5760003560e01c806352d1902d116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637c0dcb5f116100c65780637c0dcb5f146104bb5780638456cb59146104db57806391d14854146104f057806397a1cef11461055557600080fd5b806352d1902d1461044f5780635c975abb14610464578063717d335f1461049b57600080fd5b80632f2ff15d116101595780633ce4a5bc116101335780633ce4a5bc146103df5780633f4ba83a14610407578063485cc9551461041c5780634f1ef2861461043c57600080fd5b80632f2ff15d1461037f57806336568abe1461039f5780633b283933146103bf57600080fd5b80631cb5ea75116101955780631cb5ea75146102aa57806321501a95146102ca57806321e093b1146102ea578063248a9ca31461032257600080fd5b806301ffc9a7146102355780630310eb761461026a578063048ae42c1461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612d37565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612da6565b61078b565b34801561029657600080fd5b5061022e6102a5366004612f68565b610a17565b3480156102b657600080fd5b5061022e6102c5366004613028565b610b92565b3480156102d657600080fd5b5061022e6102e53660046130dd565b610e03565b3480156102f657600080fd5b5060005461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032e57600080fd5b5061037161033d366004613169565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561038b57600080fd5b5061022e61039a366004613182565b610fd0565b3480156103ab57600080fd5b5061022e6103ba366004613182565b61101a565b3480156103cb57600080fd5b5061022e6103da3660046131b2565b61106b565b3480156103eb57600080fd5b5061030a73735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041357600080fd5b5061022e61118e565b34801561042857600080fd5b5061022e610437366004613245565b6111c3565b61022e61044a366004613273565b611418565b34801561045b57600080fd5b50610371611437565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b63660046132c3565b611466565b3480156104c757600080fd5b5061022e6104d6366004613309565b61156e565b3480156104e757600080fd5b5061022e61173c565b3480156104fc57600080fd5b5061025561050b366004613182565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b5061022e610570366004613382565b61176e565b34801561058157600080fd5b50610371600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190613454565b3480156105ec57600080fd5b5061022e6105fb366004613467565b61188d565b34801561060c57600080fd5b5061022e61061b366004613467565b6119bd565b34801561062c57600080fd5b5061022e61063b366004613182565b611bcc565b34801561064c57600080fd5b506103717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004613505565b611c10565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e0610694565b6001600160a01b03841615806107fd57506001600160a01b038216155b15610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361086e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108a157506001600160a01b03821630145b156108d8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190613555565b61099a576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109df90849060040161361f565b600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050505050505050565b610a1f611e1f565b610a27610694565b8651600003610a62576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610a9c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa9878785611ea0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e9190613685565b8c8c8c8c604051610b579998979695949392919061371f565b60405180910390a350610b8960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610b9a611e1f565b610ba2610694565b8551600003610bdd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003610c18576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613555565b610d7d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610dc89594939291906137c0565b60405180910390a35050610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e50576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e58610694565b6001600160a01b038316610e98576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610ed2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f0557506001600160a01b03831630145b15610f3c576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4684846121a3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610f97928a92169089908890889060040161380c565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461100a81612371565b611014838361237b565b50505050565b6001600160a01b038116331461105c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110668282612468565b505050565b611073611e1f565b61107b610694565b85516000036110b6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036110f0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e8573735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261115d928c926001600160a01b0316918c919081908c908c9083908d9061371f565b60405180910390a3610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b881612371565b6111c061252c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120e5750825b905060008267ffffffffffffffff16600114801561122b5750303b155b905081158015611239575080155b15611270576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112d15784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ee57506001600160a01b038616155b15611325576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132d6125bc565b6113356125bc565b61133d6125c4565b6113456125d4565b61135060008761237b565b5061137b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761237b565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610b895784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114206125e4565b611429826126b4565b61143382826126bf565b5050565b60006114416127e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab146114b3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114bb610694565b6001600160a01b0382166114fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061154090849060040161361f565b600060405180830381600087803b15801561155a57600080fd5b505af1158015610dfb573d6000803e3d6000fd5b611576611e1f565b61157e610694565b83516000036115b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036115f3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ff8484612845565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190613685565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613685565b8a60405161170a979695949392919061387d565b60405180910390a35061101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61176681612371565b6111c06128b3565b611776611e1f565b61177e610694565b83516000036117b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036117f3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118118373735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261185c928a926001600160a01b0316918a9190819081908b9061387d565b60405180910390a361101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118da576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2610694565b6001600160a01b03851615806118ff57506001600160a01b038316155b15611936576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611983908990899089908890889060040161380c565b600060405180830381600087803b15801561199d57600080fd5b505af11580156119b1573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a0a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a12610694565b6001600160a01b0385161580611a2f57506001600160a01b038316155b15611a66576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611aa0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611ad357506001600160a01b03831630145b15611b0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190613555565b611936576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c0681612371565b6110148383612468565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c65610694565b6001600160a01b0383161580611c8257506001600160a01b038116155b15611cb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611cf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d2657506001600160a01b03811630145b15611d5d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de99190613555565b611066576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611ed391815260200190565b6040805180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f139190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613555565b611ff2576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af115801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613555565b6120b8576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190613555565b612172576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613555565b61226d576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611066576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c0813361292c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661245e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561245e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6125346129b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612a14565b6125cc612a14565b6106f0612a7b565b6125dc612a14565b6106f0612acc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061267d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126717f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143381612371565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612737575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261273491810190613685565b60015b61277d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127d9576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612774565b6110668383612ad4565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121768383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae9190613685565b611ea0565b6128bb610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361259e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611433576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612774565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a83612a14565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61217d612a14565b612add82612b2a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b22576110668282612bd2565b611433612c48565b806001600160a01b03163b600003612b79576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612774565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bef91906138eb565b600060405180830381855af49150503d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b5091509150612c3f858383612c80565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612c9557612c9082612cf5565b612176565b8151158015612cac57506001600160a01b0384163b155b15612cee576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612774565b5080612176565b805115612d055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217657600080fd5b6001600160a01b03811681146111c057600080fd5b600060608284031215612da057600080fd5b50919050565b60008060008060808587031215612dbc57600080fd5b8435612dc781612d79565b9350602085013592506040850135612dde81612d79565b9150606085013567ffffffffffffffff811115612dfa57600080fd5b612e0687828801612d8e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5257600080fd5b813567ffffffffffffffff811115612e6c57612e6c612e12565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ed857612ed8612e12565b604052818152838201602001851015612ef057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f1f57600080fd5b50813567ffffffffffffffff811115612f3757600080fd5b602083019150836020828501011115612f4f57600080fd5b9250929050565b600060a08284031215612da057600080fd5b600080600080600080600060c0888a031215612f8357600080fd5b873567ffffffffffffffff811115612f9a57600080fd5b612fa68a828b01612e41565b975050602088013595506040880135612fbe81612d79565b9450606088013567ffffffffffffffff811115612fda57600080fd5b612fe68a828b01612f0d565b9095509350506080880135915060a088013567ffffffffffffffff81111561300d57600080fd5b6130198a828b01612f56565b91505092959891949750929550565b60008060008060008060a0878903121561304157600080fd5b863567ffffffffffffffff81111561305857600080fd5b61306489828a01612e41565b965050602087013561307581612d79565b9450604087013567ffffffffffffffff81111561309157600080fd5b61309d89828a01612f0d565b90955093505060608701359150608087013567ffffffffffffffff8111156130c457600080fd5b6130d089828a01612f56565b9150509295509295509295565b6000806000806000608086880312156130f557600080fd5b853567ffffffffffffffff81111561310c57600080fd5b61311888828901612d8e565b95505060208601359350604086013561313081612d79565b9250606086013567ffffffffffffffff81111561314c57600080fd5b61315888828901612f0d565b969995985093965092949392505050565b60006020828403121561317b57600080fd5b5035919050565b6000806040838503121561319557600080fd5b8235915060208301356131a781612d79565b809150509250929050565b60008060008060008060a087890312156131cb57600080fd5b863567ffffffffffffffff8111156131e257600080fd5b6131ee89828a01612e41565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561321957600080fd5b61322589828a01612f0d565b909450925050608087013567ffffffffffffffff8111156130c457600080fd5b6000806040838503121561325857600080fd5b823561326381612d79565b915060208301356131a781612d79565b6000806040838503121561328657600080fd5b823561329181612d79565b9150602083013567ffffffffffffffff8111156132ad57600080fd5b6132b985828601612e41565b9150509250929050565b600080604083850312156132d657600080fd5b82356132e181612d79565b9150602083013567ffffffffffffffff8111156132fd57600080fd5b6132b985828601612d8e565b6000806000806080858703121561331f57600080fd5b843567ffffffffffffffff81111561333657600080fd5b61334287828801612e41565b94505060208501359250604085013561335a81612d79565b9150606085013567ffffffffffffffff81111561337657600080fd5b612e0687828801612f56565b6000806000806080858703121561339857600080fd5b843567ffffffffffffffff8111156133af57600080fd5b6133bb87828801612e41565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561337657600080fd5b60005b838110156134015781810151838201526020016133e9565b50506000910152565b600081518084526134228160208601602086016133e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612176602083018461340a565b60008060008060008060a0878903121561348057600080fd5b863567ffffffffffffffff81111561349757600080fd5b6134a389828a01612d8e565b96505060208701356134b481612d79565b94506040870135935060608701356134cb81612d79565b9250608087013567ffffffffffffffff8111156134e757600080fd5b6134f389828a01612f0d565b979a9699509497509295939492505050565b60008060006060848603121561351a57600080fd5b833561352581612d79565b925060208401359150604084013561353c81612d79565b809150509250925092565b80151581146111c057600080fd5b60006020828403121561356757600080fd5b815161217681613547565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135a757600080fd5b830160208101925035905067ffffffffffffffff8111156135c757600080fd5b803603821315612f4f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561363081612d79565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461365c57600080fd5b80604085015250506136716040840184613572565b606080850152612c3f6080850182846135d6565b60006020828403121561369757600080fd5b5051919050565b600081356136ab81612d79565b6001600160a01b0316835260208201356136c481613547565b1515602084015260408201356136d981612d79565b6001600160a01b031660408401526136f46060830183613572565b60a0606086015261370960a0860182846135d6565b6080948501359590940194909452509092915050565b6101008152600061373461010083018c61340a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526137688187896135d6565b90508460c084015282810360e0840152613782818561369e565b9c9b505050505050505050505050565b600080604083850312156137a557600080fd5b82516137b081612d79565b6020939093015192949293505050565b6080815260006137d3608083018861340a565b82810360208401526137e68187896135d6565b90508460408401528281036060840152613800818561369e565b98975050505050505050565b60808152600061381c8788613572565b6060608085015261383160e0850182846135d6565b915050602088013561384281612d79565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138008185876135d6565b6101008152600061389261010083018a61340a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506138dd602082018561369e565b9a9950505050505050505050565b600082516138fd8184602087016133e6565b919091019291505056fea26469706673582212209729ede334f07afe016eab9b4d72c7ce168ef243ba933f0783bfed07e3f86edf64736f6c634300081a0033","sourceMap":"958:13493:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2316:19:44;:17;:19::i;:::-;2885:9:10::1;::::0;-1:-1:-1;;;;;2885:9:10::1;2871:10;:23;::::0;::::1;::::0;:64:::1;;-1:-1:-1::0;2898:10:10::1;1331:42;2898:37;;2871:64;2867:98;;;2944:21;;;;;;;;;;;;;;2867:98;958:13493:::0;;;;;3443:202:40;;;;;;;;;;-1:-1:-1;3443:202:40;;;;;:::i;:::-;;:::i;:::-;;;516:14:108;;509:22;491:41;;479:2;464:18;3443:202:40;;;;;;;;13852:597:10;;;;;;;;;;-1:-1:-1;13852:597:10;;;;;:::i;:::-;;:::i;6348:749::-;;;;;;;;;;-1:-1:-1;6348:749:10;;;;;:::i;:::-;;:::i;9116:688::-;;;;;;;;;;-1:-1:-1;9116:688:10;;;;;:::i;:::-;;:::i;12555:557::-;;;;;;;;;;-1:-1:-1;12555:557:10;;;;;:::i;:::-;;:::i;1426:24::-;;;;;;;;;;-1:-1:-1;1426:24:10;;;;-1:-1:-1;;;;;1426:24:10;;;;;;-1:-1:-1;;;;;6694:55:108;;;6676:74;;6664:2;6649:18;1426:24:10;6530:226:108;4759:191:40;;;;;;;;;;-1:-1:-1;4759:191:40;;;;;:::i;:::-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;;4759:191;;;;7138:25:108;;;7126:2;7111:18;4759:191:40;6992:177:108;5246:136:40;;;;;;;;;;-1:-1:-1;5246:136:40;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:40;;;;;:::i;:::-;;:::i;8215:547:10:-;;;;;;;;;;-1:-1:-1;8215:547:10;;;;;:::i;:::-;;:::i;1281:92::-;;;;;;;;;;;;1331:42;1281:92;;3123:77;;;;;;;;;;;;;:::i;2067:439::-;;;;;;;;;;-1:-1:-1;2067:439:10;;;;;:::i;:::-;;:::i;4158:214:42:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;2692:145:44:-;;;;;;;;;;-1:-1:-1;1270:23:44;2821:9;;;2692:145;;13292:236:10;;;;;;;;;;-1:-1:-1;13292:236:10;;;;;:::i;:::-;;:::i;5259:674::-;;;;;;;;;;-1:-1:-1;5259:674:10;;;;;:::i;:::-;;:::i;3010:73::-;;;;;;;;;;;;;:::i;3732:207:40:-;;;;;;;;;;-1:-1:-1;3732:207:40;;;;;:::i;:::-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;;;;3732:207;7331:503:10;;;;;;;;;;-1:-1:-1;7331:503:10;;;;;:::i;:::-;;:::i;2317:49:40:-;;;;;;;;;;-1:-1:-1;2317:49:40;2362:4;2317:49;;1819:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10819:397:10:-;;;;;;;;;;-1:-1:-1;10819:397:10;;;;;:::i;:::-;;:::i;11601:642::-;;;;;;;;;;-1:-1:-1;11601:642:10;;;;;:::i;:::-;;:::i;5662:138:40:-;;;;;;;;;;-1:-1:-1;5662:138:40;;;;;:::i;:::-;;:::i;1510:62:10:-;;;;;;;;;;;;1548:24;1510:62;;10042:426;;;;;;;;;;-1:-1:-1;10042:426:10;;;;;:::i;:::-;;:::i;2905:128:44:-;1270:23;2821:9;;;2966:61;;;3001:15;;;;;;;;;;;;;;2966:61;2905:128::o;3443:202:40:-;3528:4;3551:47;;;3566:32;3551:47;;:87;;-1:-1:-1;1148:25:46;1133:40;;;;3602:36:40;3544:94;3443:202;-1:-1:-1;;3443:202:40:o;13852:597:10:-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;14079:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;14102:20:10;::::2;::::0;14079:43:::2;14075:69;;;14131:13;;;;;;;;;;;;;;14075:69;14158:6;14168:1;14158:11:::0;14154:49:::2;;14178:25;;;;;;;;;;;;;;14154:49;-1:-1:-1::0;;;;;14217:33:10;::::2;1331:42;14217:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;14254:23:10;::::2;14272:4;14254:23;14217:60;14213:88;;;14286:15;;;;;;;;;;;;;;14213:88;14317:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;14317:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;14317:21:10;::::2;::::0;::::2;::::0;14234:18:108;;14317:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14312:71;;14363:20;;;;;;;;;;;;;;14312:71;14393:49;::::0;;;;-1:-1:-1;;;;;14393:34:10;::::2;::::0;::::2;::::0;:49:::2;::::0;14428:13;;14393:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13852:597:::0;;;;:::o;6348:749::-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;6639:8:10::2;:15;6658:1;6639:20:::0;6635:46:::2;;6668:13;;;;;;;;;;;;;;6635:46;6695:6;6705:1;6695:11:::0;6691:49:::2;;6715:25;;;;;;;;;;;;;;6691:49;6751:14;6768:51;6795:6;6803:5;6810:8;6768:26;:51::i;:::-;6751:68;;6881:1;6857:10;-1:-1:-1::0;;;;;6834:256:10::2;;6896:8;6918:5;6937:6;6957;6984:5;-1:-1:-1::0;;;;;6977:31:10::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7024:7;;7045:8;7067:13;6834:256;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6625:472;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3293:20;6348:749:10;;;;;;;:::o;9116:688::-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;9372:8:10::2;:15;9391:1;9372:20:::0;9368:46:::2;;9401:13;;;;;;;;;;;;;;9368:46;9446:1;9428:19:::0;;;9424:46:::2;;9456:14;;;;;;;;;;;;;;9424:46;9518:50;::::0;;;;::::2;::::0;::::2;7138:25:108::0;;;9482:16:10::2;::::0;;;-1:-1:-1;;;;;9518:40:10;::::2;::::0;::::2;::::0;7111:18:108;;9518:50:10::2;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9583:74;::::0;;;;9613:10:::2;9583:74;::::0;::::2;19435::108::0;1331:42:10::2;19525:18:108::0;;;19518:83;19617:18;;;19610:34;;;9481:87:10;;-1:-1:-1;9481:87:10;-1:-1:-1;;;;;;9583:29:10;::::2;::::0;::::2;::::0;19408:18:108;;9583:74:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9578:135;;9680:22;;;;;;;;;;;;;;9578:135;9747:5;-1:-1:-1::0;;;;;9728:69:10::2;9735:10;-1:-1:-1::0;;;;;9728:69:10::2;;9754:8;9764:7;;9773:8;9783:13;9728:69;;;;;;;;;;:::i;:::-;;;;;;;;9358:446;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3293:20;9116:688:10;;;;;;:::o;12555:557::-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;12778:20:10;::::2;12774:46;;12807:13;;;;;;;;;;;;;;12774:46;12834:6;12844:1;12834:11:::0;12830:48:::2;;12854:24;;;;;;;;;;;;;;12830:48;-1:-1:-1::0;;;;;12892:33:10;::::2;1331:42;12892:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;12929:23:10;::::2;12947:4;12929:23;12892:60;12888:88;;;12961:15;;;;;;;;;;;;;;12888:88;12987:29;13001:6;13009;12987:13;:29::i;:::-;13078:9;::::0;13026:79:::2;::::0;;;;-1:-1:-1;;;;;13026:42:10;;::::2;::::0;::::2;::::0;:79:::2;::::0;13069:7;;13078:9:::2;::::0;13089:6;;13097:7;;;;13026:79:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12555:557:::0;;;;;:::o;5246:136:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:40;;966:10:43;6441:34:40;6437:102;;6498:30;;;;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8215:547:10:-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;8482:8:10::2;:15;8501:1;8482:20:::0;8478:46:::2;;8511:13;;;;;;;;;;;;;;8478:46;8538:6;8548:1;8538:11:::0;8534:48:::2;;8558:24;;;;;;;;;;;;;;8534:48;8593:46;8607:6;1331:42;8593:13;:46::i;:::-;8703:9;::::0;;8654:101:::2;::::0;8676:7;;8664:10:::2;::::0;8654:101:::2;::::0;::::2;::::0;8685:8;;-1:-1:-1;;;;;8703:9:10::2;::::0;8715:6;;8703:9;;;8729:7;;;;8703:9;;8741:13;;8654:101:::2;:::i;:::-;;;;;;;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3123:77:10;1548:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3183:10:10::1;:8;:10::i;:::-;3123:77:::0;:::o;2067:439::-;8870:21:41;4302:15;;;;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:41;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4951:18;;;;4968:1;4951:18;;;4979:67;;;;5013:22;;;;;;;;4979:67;-1:-1:-1;;;;;2156:24:10;::::1;::::0;;:48:::1;;-1:-1:-1::0;;;;;;2184:20:10;::::1;::::0;2156:48:::1;2152:99;;;2227:13;;;;;;;;;;;;;;2152:99;2260:24;:22;:24::i;:::-;2294:22;:20;:22::i;:::-;2326:17;:15;:17::i;:::-;2353:24;:22;:24::i;:::-;2388:38;2362:4:40;2419:6:10::0;2388:10:::1;:38::i;:::-;;2436:31;1548:24;2460:6;2436:10;:31::i;:::-;-1:-1:-1::0;2477:9:10::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;2477:22:10;::::1;;::::0;;5066:101:41;;;;5100:23;;;;;;5142:14;;-1:-1:-1;22697:50:108;;5142:14:41;;22685:2:108;22670:18;5142:14:41;;;;;;;4092:1081;;;;;2067:439:10;;:::o;4158:214:42:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;3705:134::-;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;1327:66:54::1;3705:134:42::0;:::o;13292:236:10:-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;13419:20:10;::::2;13415:46;;13448:13;;;;;;;;;;;;;;13415:46;13472:49;::::0;;;;-1:-1:-1;;;;;13472:34:10;::::2;::::0;::::2;::::0;:49:::2;::::0;13507:13;;13472:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;5259:674:::0;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;5485:8:10::2;:15;5504:1;5485:20:::0;5481:46:::2;;5514:13;;;;;;;;;;;;;;5481:46;5541:6;5551:1;5541:11:::0;5537:49:::2;;5561:25;;;;;;;;;;;;;;5537:49;5597:14;5614:29;5629:6;5637:5;5614:14;:29::i;:::-;5597:46;;5705:1;5681:10;-1:-1:-1::0;;;;;5658:268:10::2;;5720:8;5742:5;5761:6;5781;5808:5;-1:-1:-1::0;;;;;5801:31:10::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5871:5;-1:-1:-1::0;;;;;5864:23:10::2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5903:13;5658:268;;;;;;;;;;;;:::i;:::-;;;;;;;;5471:462;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3010:73:10;1548:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3068:8:10::1;:6;:8::i;7331:503::-:0;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;7559:8:10::2;:15;7578:1;7559:20:::0;7555:46:::2;;7588:13;;;;;;;;;;;;;;7555:46;7615:6;7625:1;7615:11:::0;7611:48:::2;;7635:24;;;;;;;;;;;;;;7611:48;7670:46;7684:6;1331:42;7670:13;:46::i;:::-;7780:9;::::0;;7731:96:::2;::::0;7753:7;;7741:10:::2;::::0;7731:96:::2;::::0;::::2;::::0;7762:8;;-1:-1:-1;;;;;7780:9:10::2;::::0;7792:6;;7780:9;;;;;7813:13;;7731:96:::2;:::i;:::-;;;;;;;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;10819:397:10;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;11058:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;11081:20:10;::::2;::::0;11058:43:::2;11054:69;;;11110:13;;;;;;;;;;;;;;11054:69;11134:75;::::0;;;;-1:-1:-1;;;;;11134:42:10;::::2;::::0;::::2;::::0;:75:::2;::::0;11177:7;;11186:5;;11193:6;;11201:7;;;;11134:75:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10819:397:::0;;;;;;:::o;11601:642::-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;11847:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;11870:20:10;::::2;::::0;11847:43:::2;11843:69;;;11899:13;;;;;;;;;;;;;;11843:69;11926:6;11936:1;11926:11:::0;11922:49:::2;;11946:25;;;;;;;;;;;;;;11922:49;-1:-1:-1::0;;;;;11985:33:10;::::2;1331:42;11985:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;12022:23:10;::::2;12040:4;12022:23;11985:60;11981:88;;;12054:15;;;;;;;;;;;;;;11981:88;12085:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;12085:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;12085:21:10;::::2;::::0;::::2;::::0;14234:18:108;;12085:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12080:71;;12131:20;;;;;;;;;;;;;;5662:138:40::0;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;10042:426:10:-:0;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;10156:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;10179:20:10;::::2;::::0;10156:43:::2;10152:69;;;10208:13;;;;;;;;;;;;;;10152:69;10235:6;10245:1;10235:11:::0;10231:49:::2;;10255:25;;;;;;;;;;;;;;10231:49;-1:-1:-1::0;;;;;10295:33:10;::::2;1331:42;10295:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;10332:23:10;::::2;10350:4;10332:23;10295:60;10291:88;;;10364:15;;;;;;;;;;;;;;10291:88;10395:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;10395:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;10395:21:10;::::2;::::0;::::2;::::0;14234:18:108;;10395:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:71;;10441:20;;;;;;;;;;;;;;3326:384:45::0;2388:30;3526:9;;:20;;3522:88;;3569:30;;;;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;3900:583:10:-;4003:7;4023:16;4041:14;4066:5;-1:-1:-1;;;;;4059:40:10;;4100:8;4059:50;;;;;;;;;;;;;7138:25:108;;7126:2;7111:18;;6992:177;4059:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4124:74;;;;;4154:10;4124:74;;;19435::108;1331:42:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;4022:87:10;;-1:-1:-1;4022:87:10;-1:-1:-1;;;;;;4124:29:10;;;;;19408:18:108;;4124:74:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4119:135;;4221:22;;;;;;;;;;;;;;4119:135;4269:61;;;;;4296:10;4269:61;;;19435:74:108;4316:4:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;-1:-1:-1;;;;;4269:26:10;;;;;19408:18:108;;4269:61:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4264:121;;4353:21;;;;;;;;;;;;;;4264:121;4400:26;;;;;;;;7138:25:108;;;-1:-1:-1;;;;;4400:18:10;;;;;7111::108;;4400:26:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4395:57;;4435:17;;;;;;;;;;;;;;4395:57;4470:6;-1:-1:-1;;3900:583:10;;;;;;:::o;3716:283:45:-;1805:1;2388:30;3969:23;3716:283::o;4658:313:10:-;4740:9;;4733:65;;;;;4764:10;4733:65;;;19435:74:108;4784:4:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;-1:-1:-1;;;;;4740:9:10;;;;4733:30;;19408:18:108;;4733:65:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4728:95;;4807:16;;;;;;;;;;;;;;4728:95;4840:9;;4833:34;;;;;;;;7138:25:108;;;-1:-1:-1;;;;;4840:9:10;;;;4833:26;;7111:18:108;;4833:34:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:9;4892:2;-1:-1:-1;;;;;4892:7:10;4908:6;4892:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:43;;;4935:4;4930:34;;4948:16;;;;;;;;;;;;;;4148:103:40;4214:30;4225:4;966:10:43;4214::40;:30::i;7270:387::-;7347:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:40;;;;;;;;;:38;;;;7509:4;7475:38;;;7559:12;966:10:43;;887:96;7559:12:40;-1:-1:-1;;;;;7532:40:40;7550:7;-1:-1:-1;;;;;7532:40:40;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:40;;;;;;;;;;:39;;;;;;8155:40;966:10:43;;8097:14:40;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;3674:178:44;2563:16;:14;:16::i;:::-;1270:23;3791:17;;;::::1;::::0;;3823:22:::1;966:10:43::0;3832:12:44::1;3823:22;::::0;-1:-1:-1;;;;;6694:55:108;;;6676:74;;6664:2;6649:18;3823:22:44::1;;;;;;;3722:130;3674:178::o:0;2968:67:42:-;6931:20:41;:18;:20::i;1836:97:44:-;6931:20:41;:18;:20::i;:::-;1899:27:44::1;:25;:27::i;2540:111:45:-:0;6931:20:41;:18;:20::i;:::-;2610:34:45::1;:32;:34::i;4599:312:42:-:0;4679:4;-1:-1:-1;;;;;4688:6:42;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:42;:32;1327:66:54;2035:53;-1:-1:-1;;;;;2035:53:54;;1957:138;4749:32:42;-1:-1:-1;;;;;4749:42:42;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;2637:104:10;2362:4:40;3191:16;2362:4;3191:10;:16::i;6052:538:42:-;6169:17;-1:-1:-1;;;;;6151:50:42;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:42;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;;;;-1:-1:-1;;;;;6694:55:108;;6513:60:42;;;6676:74:108;6649:18;;6513:60:42;;;;;;;;6147:437;1327:66:54;6245:40:42;;6241:120;;6312:34;;;;;;;;7138:25:108;;;7111:18;;6312:34:42;6992:177:108;6241:120:42;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:42;5094:23;;5090:145;;5195:29;;;;;;;;;;;;;;3420:210:10;3493:7;3555:68;3582:6;3590:5;3604;-1:-1:-1;;;;;3597:23:10;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3555:26;:68::i;3366:176:44:-;2316:19;:17;:19::i;:::-;1270:23;3484:16;;;::::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:43::0;3522:12:44::1;887:96:43::0;4381:197:40;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;4464:108;;4514:47;;;;;-1:-1:-1;;;;;14279:55:108;;4514:47:40;;;14261:74:108;14351:18;;;14344:34;;;14234:18;;4514:47:40;14087:297:108;3105:126:44;1270:23;2821:9;;;3163:62;;3199:15;;;;;;;;;;;;;;7084:141:41;8870:21;8560:40;;;;;;7146:73;;7191:17;;;;;;;;;;;;;;1939:156:44;6931:20:41;:18;:20::i;:::-;1270:23:44;2071:17;;;::::1;::::0;;1939:156::o;2657:183:45:-;6931:20:41;:18;:20::i;2779:335:54:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:54;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:54;;2296:1;2263:34;2259:119;;2320:47;;;;;-1:-1:-1;;;;;6694:55:108;;2320:47:54;;;6676:74:108;6649:18;;2320:47:54;6530:226:108;2259:119:54;1327:66;2387:73;;;;-1:-1:-1;;;;;2387:73:54;;;;;;;;;;2186:281::o;4106:253:67:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:67;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:67:o;6598:122:54:-;6648:9;:13;6644:70;;6684:19;;;;;;;;;;;;;;4625:582:67;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:67;;;:23;5045:49;5041:119;;;5121:24;;;;;-1:-1:-1;;;;;6694:55:108;;5121:24:67;;;6676:74:108;6649:18;;5121:24:67;6530:226:108;5041:119:67;-1:-1:-1;5180:10:67;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:108;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:154;-1:-1:-1;;;;;622:5:108;618:54;611:5;608:65;598:93;;687:1;684;677:12;702:161;768:5;813:2;804:6;799:3;795:16;791:25;788:45;;;829:1;826;819:12;788:45;-1:-1:-1;851:6:108;702:161;-1:-1:-1;702:161:108:o;868:763::-;985:6;993;1001;1009;1062:3;1050:9;1041:7;1037:23;1033:33;1030:53;;;1079:1;1076;1069:12;1030:53;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;-1:-1:-1;1265:2:108;1250:18;;1237:32;;-1:-1:-1;1347:2:108;1332:18;;1319:32;1360:33;1319:32;1360:33;:::i;:::-;1412:7;-1:-1:-1;1470:2:108;1455:18;;1442:32;1497:18;1486:30;;1483:50;;;1529:1;1526;1519:12;1483:50;1552:73;1617:7;1608:6;1597:9;1593:22;1552:73;:::i;:::-;1542:83;;;868:763;;;;;;;:::o;1636:184::-;1688:77;1685:1;1678:88;1785:4;1782:1;1775:15;1809:4;1806:1;1799:15;1825:843;1867:5;1920:3;1913:4;1905:6;1901:17;1897:27;1887:55;;1938:1;1935;1928:12;1887:55;1978:6;1965:20;2008:18;2000:6;1997:30;1994:56;;;2030:18;;:::i;:::-;2079:2;2073:9;2226:66;2221:2;2152:66;2145:4;2137:6;2133:17;2129:90;2125:99;2121:172;2113:6;2109:185;2360:6;2348:10;2345:22;2324:18;2312:10;2309:34;2306:62;2303:88;;;2371:18;;:::i;:::-;2407:2;2400:22;2431;;;2472:19;;;2493:4;2468:30;2465:39;-1:-1:-1;2462:59:108;;;2517:1;2514;2507:12;2462:59;2581:6;2574:4;2566:6;2562:17;2555:4;2547:6;2543:17;2530:58;2636:1;2608:19;;;2629:4;2604:30;2597:41;;;;2612:6;1825:843;-1:-1:-1;;;1825:843:108:o;2673:347::-;2724:8;2734:6;2788:3;2781:4;2773:6;2769:17;2765:27;2755:55;;2806:1;2803;2796:12;2755:55;-1:-1:-1;2829:20:108;;2872:18;2861:30;;2858:50;;;2904:1;2901;2894:12;2858:50;2941:4;2933:6;2929:17;2917:29;;2993:3;2986:4;2977:6;2969;2965:19;2961:30;2958:39;2955:59;;;3010:1;3007;3000:12;2955:59;2673:347;;;;;:::o;3025:162::-;3091:5;3136:3;3127:6;3122:3;3118:16;3114:26;3111:46;;;3153:1;3150;3143:12;3192:1261;3347:6;3355;3363;3371;3379;3387;3395;3448:3;3436:9;3427:7;3423:23;3419:33;3416:53;;;3465:1;3462;3455:12;3416:53;3505:9;3492:23;3538:18;3530:6;3527:30;3524:50;;;3570:1;3567;3560:12;3524:50;3593:49;3634:7;3625:6;3614:9;3610:22;3593:49;:::i;:::-;3583:59;-1:-1:-1;;3711:2:108;3696:18;;3683:32;;-1:-1:-1;3791:2:108;3776:18;;3763:32;3804:33;3763:32;3804:33;:::i;:::-;3856:7;-1:-1:-1;3916:2:108;3901:18;;3888:32;3945:18;3932:32;;3929:52;;;3977:1;3974;3967:12;3929:52;4016:60;4068:7;4057:8;4046:9;4042:24;4016:60;:::i;:::-;4095:8;;-1:-1:-1;3990:86:108;-1:-1:-1;;4203:3:108;4188:19;;4175:33;;-1:-1:-1;4287:3:108;4272:19;;4259:33;4317:18;4304:32;;4301:52;;;4349:1;4346;4339:12;4301:52;4372:75;4439:7;4428:8;4417:9;4413:24;4372:75;:::i;:::-;4362:85;;;3192:1261;;;;;;;;;;:::o;4458:1140::-;4604:6;4612;4620;4628;4636;4644;4697:3;4685:9;4676:7;4672:23;4668:33;4665:53;;;4714:1;4711;4704:12;4665:53;4754:9;4741:23;4787:18;4779:6;4776:30;4773:50;;;4819:1;4816;4809:12;4773:50;4842:49;4883:7;4874:6;4863:9;4859:22;4842:49;:::i;:::-;4832:59;;;4941:2;4930:9;4926:18;4913:32;4954:31;4979:5;4954:31;:::i;:::-;5004:5;-1:-1:-1;5062:2:108;5047:18;;5034:32;5091:18;5078:32;;5075:52;;;5123:1;5120;5113:12;5075:52;5162:60;5214:7;5203:8;5192:9;5188:24;5162:60;:::i;:::-;5241:8;;-1:-1:-1;5136:86:108;-1:-1:-1;;5349:2:108;5334:18;;5321:32;;-1:-1:-1;5432:3:108;5417:19;;5404:33;5462:18;5449:32;;5446:52;;;5494:1;5491;5484:12;5446:52;5517:75;5584:7;5573:8;5562:9;5558:24;5517:75;:::i;:::-;5507:85;;;4458:1140;;;;;;;;:::o;5603:922::-;5728:6;5736;5744;5752;5760;5813:3;5801:9;5792:7;5788:23;5784:33;5781:53;;;5830:1;5827;5820:12;5781:53;5870:9;5857:23;5903:18;5895:6;5892:30;5889:50;;;5935:1;5932;5925:12;5889:50;5958:73;6023:7;6014:6;6003:9;5999:22;5958:73;:::i;:::-;5948:83;-1:-1:-1;;6100:2:108;6085:18;;6072:32;;-1:-1:-1;6180:2:108;6165:18;;6152:32;6193:33;6152:32;6193:33;:::i;:::-;6245:7;-1:-1:-1;6305:2:108;6290:18;;6277:32;6334:18;6321:32;;6318:52;;;6366:1;6363;6356:12;6318:52;6405:60;6457:7;6446:8;6435:9;6431:24;6405:60;:::i;:::-;5603:922;;;;-1:-1:-1;5603:922:108;;-1:-1:-1;6484:8:108;;6379:86;5603:922;-1:-1:-1;;;5603:922:108:o;6761:226::-;6820:6;6873:2;6861:9;6852:7;6848:23;6844:32;6841:52;;;6889:1;6886;6879:12;6841:52;-1:-1:-1;6934:23:108;;6761:226;-1:-1:-1;6761:226:108:o;7174:367::-;7242:6;7250;7303:2;7291:9;7282:7;7278:23;7274:32;7271:52;;;7319:1;7316;7309:12;7271:52;7364:23;;;-1:-1:-1;7463:2:108;7448:18;;7435:32;7476:33;7435:32;7476:33;:::i;:::-;7528:7;7518:17;;;7174:367;;;;;:::o;7546:1119::-;7692:6;7700;7708;7716;7724;7732;7785:3;7773:9;7764:7;7760:23;7756:33;7753:53;;;7802:1;7799;7792:12;7753:53;7842:9;7829:23;7875:18;7867:6;7864:30;7861:50;;;7907:1;7904;7897:12;7861:50;7930:49;7971:7;7962:6;7951:9;7947:22;7930:49;:::i;:::-;7920:59;-1:-1:-1;;8048:2:108;8033:18;;8020:32;;-1:-1:-1;8149:2:108;8134:18;;8121:32;;-1:-1:-1;8232:2:108;8217:18;;8204:32;8261:18;8248:32;;8245:52;;;8293:1;8290;8283:12;8245:52;8332:60;8384:7;8373:8;8362:9;8358:24;8332:60;:::i;:::-;8411:8;;-1:-1:-1;8306:86:108;-1:-1:-1;;8499:3:108;8484:19;;8471:33;8529:18;8516:32;;8513:52;;;8561:1;8558;8551:12;8670:388;8738:6;8746;8799:2;8787:9;8778:7;8774:23;8770:32;8767:52;;;8815:1;8812;8805:12;8767:52;8854:9;8841:23;8873:31;8898:5;8873:31;:::i;:::-;8923:5;-1:-1:-1;8980:2:108;8965:18;;8952:32;8993:33;8952:32;8993:33;:::i;9063:455::-;9140:6;9148;9201:2;9189:9;9180:7;9176:23;9172:32;9169:52;;;9217:1;9214;9207:12;9169:52;9256:9;9243:23;9275:31;9300:5;9275:31;:::i;:::-;9325:5;-1:-1:-1;9381:2:108;9366:18;;9353:32;9408:18;9397:30;;9394:50;;;9440:1;9437;9430:12;9394:50;9463:49;9504:7;9495:6;9484:9;9480:22;9463:49;:::i;:::-;9453:59;;;9063:455;;;;;:::o;9523:501::-;9622:6;9630;9683:2;9671:9;9662:7;9658:23;9654:32;9651:52;;;9699:1;9696;9689:12;9651:52;9738:9;9725:23;9757:31;9782:5;9757:31;:::i;:::-;9807:5;-1:-1:-1;9863:2:108;9848:18;;9835:32;9890:18;9879:30;;9876:50;;;9922:1;9919;9912:12;9876:50;9945:73;10010:7;10001:6;9990:9;9986:22;9945:73;:::i;10029:836::-;10155:6;10163;10171;10179;10232:3;10220:9;10211:7;10207:23;10203:33;10200:53;;;10249:1;10246;10239:12;10200:53;10289:9;10276:23;10322:18;10314:6;10311:30;10308:50;;;10354:1;10351;10344:12;10308:50;10377:49;10418:7;10409:6;10398:9;10394:22;10377:49;:::i;:::-;10367:59;-1:-1:-1;;10495:2:108;10480:18;;10467:32;;-1:-1:-1;10575:2:108;10560:18;;10547:32;10588:33;10547:32;10588:33;:::i;:::-;10640:7;-1:-1:-1;10700:2:108;10685:18;;10672:32;10729:18;10716:32;;10713:52;;;10761:1;10758;10751:12;10713:52;10784:75;10851:7;10840:8;10829:9;10825:24;10784:75;:::i;10870:815::-;10996:6;11004;11012;11020;11073:3;11061:9;11052:7;11048:23;11044:33;11041:53;;;11090:1;11087;11080:12;11041:53;11130:9;11117:23;11163:18;11155:6;11152:30;11149:50;;;11195:1;11192;11185:12;11149:50;11218:49;11259:7;11250:6;11239:9;11235:22;11218:49;:::i;:::-;11208:59;-1:-1:-1;;11336:2:108;11321:18;;11308:32;;-1:-1:-1;11437:2:108;11422:18;;11409:32;;-1:-1:-1;11520:2:108;11505:18;;11492:32;11549:18;11536:32;;11533:52;;;11581:1;11578;11571:12;11690:250;11775:1;11785:113;11799:6;11796:1;11793:13;11785:113;;;11875:11;;;11869:18;11856:11;;;11849:39;11821:2;11814:10;11785:113;;;-1:-1:-1;;11932:1:108;11914:16;;11907:27;11690:250::o;11945:330::-;11987:3;12025:5;12019:12;12052:6;12047:3;12040:19;12068:76;12137:6;12130:4;12125:3;12121:14;12114:4;12107:5;12103:16;12068:76;:::i;:::-;12189:2;12177:15;12194:66;12173:88;12164:98;;;;12264:4;12160:109;;11945:330;-1:-1:-1;;11945:330:108:o;12280:220::-;12429:2;12418:9;12411:21;12392:4;12449:45;12490:2;12479:9;12475:18;12467:6;12449:45;:::i;12505:1064::-;12639:6;12647;12655;12663;12671;12679;12732:3;12720:9;12711:7;12707:23;12703:33;12700:53;;;12749:1;12746;12739:12;12700:53;12789:9;12776:23;12822:18;12814:6;12811:30;12808:50;;;12854:1;12851;12844:12;12808:50;12877:73;12942:7;12933:6;12922:9;12918:22;12877:73;:::i;:::-;12867:83;;;13000:2;12989:9;12985:18;12972:32;13013:31;13038:5;13013:31;:::i;:::-;13063:5;-1:-1:-1;13141:2:108;13126:18;;13113:32;;-1:-1:-1;13223:2:108;13208:18;;13195:32;13236:33;13195:32;13236:33;:::i;:::-;13288:7;-1:-1:-1;13348:3:108;13333:19;;13320:33;13378:18;13365:32;;13362:52;;;13410:1;13407;13400:12;13362:52;13449:60;13501:7;13490:8;13479:9;13475:24;13449:60;:::i;:::-;12505:1064;;;;-1:-1:-1;12505:1064:108;;-1:-1:-1;12505:1064:108;;13528:8;;12505:1064;-1:-1:-1;;;12505:1064:108:o;13574:508::-;13651:6;13659;13667;13720:2;13708:9;13699:7;13695:23;13691:32;13688:52;;;13736:1;13733;13726:12;13688:52;13775:9;13762:23;13794:31;13819:5;13794:31;:::i;:::-;13844:5;-1:-1:-1;13922:2:108;13907:18;;13894:32;;-1:-1:-1;14004:2:108;13989:18;;13976:32;14017:33;13976:32;14017:33;:::i;:::-;14069:7;14059:17;;;13574:508;;;;;:::o;14389:118::-;14475:5;14468:13;14461:21;14454:5;14451:32;14441:60;;14497:1;14494;14487:12;14512:245;14579:6;14632:2;14620:9;14611:7;14607:23;14603:32;14600:52;;;14648:1;14645;14638:12;14600:52;14680:9;14674:16;14699:28;14721:5;14699:28;:::i;14762:559::-;14820:5;14827:6;14887:3;14874:17;14969:66;14958:8;14942:14;14938:29;14934:102;14914:18;14910:127;14900:155;;15051:1;15048;15041:12;14900:155;15079:33;;15183:4;15170:18;;;-1:-1:-1;15131:21:108;;-1:-1:-1;15211:18:108;15200:30;;15197:50;;;15243:1;15240;15233:12;15197:50;15290:6;15274:14;15270:27;15263:5;15259:39;15256:59;;;15311:1;15308;15301:12;15326:325;15414:6;15409:3;15402:19;15466:6;15459:5;15452:4;15447:3;15443:14;15430:43;;15518:1;15511:4;15502:6;15497:3;15493:16;15489:27;15482:38;15384:3;15640:4;15570:66;15565:2;15557:6;15553:15;15549:88;15544:3;15540:98;15536:109;15529:116;;15326:325;;;;:::o;15656:798::-;15845:2;15834:9;15827:21;15808:4;15883:6;15870:20;15899:31;15924:5;15899:31;:::i;:::-;-1:-1:-1;;;;;15970:5:108;15966:54;15961:2;15950:9;15946:18;15939:82;;16070:2;16062:6;16058:15;16045:29;16106:18;16097:7;16093:32;16156:2;16147:7;16144:15;16134:43;;16173:1;16170;16163:12;16134:43;16213:2;16208;16197:9;16193:18;16186:30;;;16259:55;16310:2;16302:6;16298:15;16290:6;16259:55;:::i;:::-;16352:4;16345;16334:9;16330:20;16323:34;16374:74;16443:3;16432:9;16428:19;16414:12;16400;16374:74;:::i;16459:230::-;16529:6;16582:2;16570:9;16561:7;16557:23;16553:32;16550:52;;;16598:1;16595;16588:12;16550:52;-1:-1:-1;16643:16:108;;16459:230;-1:-1:-1;16459:230:108:o;16694:937::-;16759:3;16805:5;16792:19;16820:33;16845:7;16820:33;:::i;:::-;-1:-1:-1;;;;;16874:56:108;16862:69;;16979:4;16968:16;;16955:30;16994;16955;16994;:::i;:::-;17063:15;17056:23;17049:4;17040:14;;17033:47;17128:4;17117:16;;17104:30;17143:33;17104:30;17143:33;:::i;:::-;-1:-1:-1;;;;;17208:56:108;17201:4;17192:14;;17185:80;17308:55;17357:4;17346:16;;17350:5;17308:55;:::i;:::-;17395:4;17388;17383:3;17379:14;17372:28;17421:69;17484:4;17479:3;17475:14;17461:12;17447;17421:69;:::i;:::-;17559:4;17548:16;;;17535:30;17581:14;;;;17574:31;;;;-1:-1:-1;17409:81:108;;16694:937;-1:-1:-1;;16694:937:108:o;17636:1041::-;18067:3;18056:9;18049:22;18030:4;18094:46;18135:3;18124:9;18120:19;18112:6;18094:46;:::i;:::-;-1:-1:-1;;;;;18180:6:108;18176:55;18171:2;18160:9;18156:18;18149:83;18268:6;18263:2;18252:9;18248:18;18241:34;18311:6;18306:2;18295:9;18291:18;18284:34;18355:6;18349:3;18338:9;18334:19;18327:35;18411:9;18403:6;18399:22;18393:3;18382:9;18378:19;18371:51;18445:49;18487:6;18479;18471;18445:49;:::i;:::-;18431:63;;18531:6;18525:3;18514:9;18510:19;18503:35;18587:9;18579:6;18575:22;18569:3;18558:9;18554:19;18547:51;18615:56;18664:6;18656;18615:56;:::i;:::-;18607:64;17636:1041;-1:-1:-1;;;;;;;;;;;;17636:1041:108:o;18864:364::-;18943:6;18951;19004:2;18992:9;18983:7;18979:23;18975:32;18972:52;;;19020:1;19017;19010:12;18972:52;19052:9;19046:16;19071:31;19096:5;19071:31;:::i;:::-;19192:2;19177:18;;;;19171:25;19121:5;;19171:25;;-1:-1:-1;;;18864:364:108:o;19655:704::-;19974:3;19963:9;19956:22;19937:4;20001:46;20042:3;20031:9;20027:19;20019:6;20001:46;:::i;:::-;20095:9;20087:6;20083:22;20078:2;20067:9;20063:18;20056:50;20129:49;20171:6;20163;20155;20129:49;:::i;:::-;20115:63;;20214:6;20209:2;20198:9;20194:18;20187:34;20269:9;20261:6;20257:22;20252:2;20241:9;20237:18;20230:50;20297:56;20346:6;20338;20297:56;:::i;:::-;20289:64;19655:704;-1:-1:-1;;;;;;;;19655:704:108:o;20364:1105::-;20659:3;20648:9;20641:22;20622:4;20706:46;20745:6;20737;20706:46;:::i;:::-;20789:4;20783:3;20772:9;20768:19;20761:33;20817:74;20886:3;20875:9;20871:19;20857:12;20843;20817:74;:::i;:::-;20803:88;;;20938:4;20930:6;20926:17;20913:31;20953;20978:5;20953:31;:::i;:::-;-1:-1:-1;;;;;21021:54:108;;;21015:3;21000:19;;20993:83;21146:4;21134:17;;;21121:31;21183:3;21168:19;;21161:36;21235:55;;;21228:4;21213:20;;21206:85;21307:20;;21300:36;;;21374:22;;;-1:-1:-1;21352:20:108;;21345:52;21414:49;21378:6;21448;21440;21414:49;:::i;22758:1058::-;23233:3;23222:9;23215:22;23196:4;23260:46;23301:3;23290:9;23286:19;23278:6;23260:46;:::i;:::-;-1:-1:-1;;;;;23346:6:108;23342:55;23337:2;23326:9;23322:18;23315:83;23434:6;23429:2;23418:9;23414:18;23407:34;23477:6;23472:2;23461:9;23457:18;23450:34;23521:6;23515:3;23504:9;23500:19;23493:35;23559:9;23551:6;23547:22;23606:2;23600:3;23589:9;23585:19;23578:31;23633:1;23625:6;23618:17;23672:6;23666:3;23655:9;23651:19;23644:35;23724:2;23720;23716:11;23710:3;23699:9;23695:19;23688:40;;23745:65;23806:2;23798:6;23794:15;23786:6;23745:65;:::i;:::-;23737:73;22758:1058;-1:-1:-1;;;;;;;;;;22758:1058:108:o;25609:287::-;25738:3;25776:6;25770:13;25792:66;25851:6;25846:3;25839:4;25831:6;25827:17;25792:66;:::i;:::-;25874:16;;;;;25609:287;-1:-1:-1;;25609:287:108:o","linkReferences":{},"immutableReferences":{"44509":[{"start":9711,"length":32},{"start":9752,"length":32},{"start":10222,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","FUNGIBLE_MODULE_ADDRESS()":"3ce4a5bc","PAUSER_ROLE()":"e63ab1e9","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":"1cb5ea75","deposit(address,uint256,address)":"f45346dc","depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":"c39aca37","depositAndCall((bytes,address,uint256),uint256,address,bytes)":"21501a95","depositAndRevert(address,uint256,address,(address,uint64,bytes))":"0310eb76","execute((bytes,address,uint256),address,uint256,address,bytes)":"bcf7f32b","executeRevert(address,(address,uint64,bytes))":"717d335f","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","unpause()":"3f4ba83a","upgradeToAndCall(address,bytes)":"4f1ef286","withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":"7c0dcb5f","withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":"97a1cef1","withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":"048ae42c","withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":"3b283933","zetaToken()":"21e093b1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZetaAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWZETAOrFungible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Called\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"depositAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zetaToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The contract doesn't hold any funds and should never have active allowances.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Called(address,address,bytes,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata passed to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\",\"zrc20\":\"Address of zrc20 to pay fees.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"chainId\":\"Chain id of external chain.\",\"gasLimit\":\"Gas limit.\",\"gasfee\":\"The gas fee for the withdrawal.\",\"message\":\"The calldata passed to the contract call.\",\"protocolFlatFee\":\"The protocol flat fee for the withdrawal.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address from which the tokens are withdrawn.\",\"value\":\"The amount of tokens withdrawn.\",\"zrc20\":\"The address of the ZRC20 token.\"}}},\"kind\":\"dev\",\"methods\":{\"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"Address of zrc20 to pay fees.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"deposit(address,uint256,address)\":{\"params\":{\"amount\":\"The amount of tokens to deposit.\",\"target\":\"The target address to receive the deposited tokens.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"depositAndCall((bytes,address,uint256),uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\"}},\"depositAndRevert(address,uint256,address,(address,uint64,bytes))\":{\"params\":{\"amount\":\"The amount of tokens to revert.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"execute((bytes,address,uint256),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"executeRevert(address,(address,uint64,bytes))\":{\"params\":{\"revertContext\":\"Revert context to pass to onRevert.\",\"target\":\"The target contract to call.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Using admin to authorize upgrades and pause.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\"}},\"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"chainId\":\"Chain id of the external chain.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\"}}},\"title\":\"GatewayZEVM\",\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotFungibleModule()\":[{\"notice\":\"Error indicating that the caller is not the Fungible module.\"}],\"EmptyMessage()\":[{\"notice\":\"Error indicating call method received empty message as argument.\"}],\"FailedZetaSent()\":[{\"notice\":\"Error indicating a failure to send ZETA tokens.\"}],\"GasFeeTransferFailed()\":[{\"notice\":\"Error indicating a failure to transfer gas fee.\"}],\"InsufficientZRC20Amount()\":[{\"notice\":\"Error indicating an insufficient ZRC20 token amount.\"}],\"InsufficientZetaAmount()\":[{\"notice\":\"Error indicating an insufficient zeta amount.\"}],\"InvalidTarget()\":[{\"notice\":\"Error indicating an invalid target address.\"}],\"OnlyWZETAOrFungible()\":[{\"notice\":\"Error indicating that only WZETA or the Fungible module can call the function.\"}],\"WithdrawalFailed()\":[{\"notice\":\"Error indicating a withdrawal failure.\"}],\"ZRC20BurnFailed()\":[{\"notice\":\"Error indicating a failure to burn ZRC20 tokens.\"}],\"ZRC20DepositFailed()\":[{\"notice\":\"Error indicating a failure to deposit ZRC20 tokens.\"}],\"ZRC20TransferFailed()\":[{\"notice\":\"Error indicating a failure to transfer ZRC20 tokens.\"}],\"ZeroAddress()\":[{\"notice\":\"Error indicating a zero address was provided.\"}]},\"events\":{\"Called(address,address,bytes,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a cross-chain call is made.\"},\"Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a withdrawal is made.\"}},\"kind\":\"user\",\"methods\":{\"FUNGIBLE_MODULE_ADDRESS()\":{\"notice\":\"The constant address of the Fungible module.\"},\"PAUSER_ROLE()\":{\"notice\":\"New role identifier for pauser role.\"},\"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Call a smart contract on an external chain without asset transfer.\"},\"deposit(address,uint256,address)\":{\"notice\":\"Deposit foreign coins into ZRC20.\"},\"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)\":{\"notice\":\"Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM.\"},\"depositAndCall((bytes,address,uint256),uint256,address,bytes)\":{\"notice\":\"Deposit ZETA and call a user-specified contract on ZEVM.\"},\"depositAndRevert(address,uint256,address,(address,uint64,bytes))\":{\"notice\":\"Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM.\"},\"execute((bytes,address,uint256),address,uint256,address,bytes)\":{\"notice\":\"Execute a user-specified contract on ZEVM.\"},\"executeRevert(address,(address,uint64,bytes))\":{\"notice\":\"Revert a user-specified contract on ZEVM.\"},\"initialize(address,address)\":{\"notice\":\"Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\"},\"pause()\":{\"notice\":\"Pause contract.\"},\"unpause()\":{\"notice\":\"Unpause contract.\"},\"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZRC20 tokens to an external chain.\"},\"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZETA tokens to an external chain.\"},\"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZRC20 tokens and call a smart contract on an external chain.\"},\"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZETA tokens and call a smart contract on an external chain.\"},\"zetaToken()\":{\"notice\":\"The address of the Zeta token.\"}},\"notice\":\"The GatewayZEVM contract is the endpoint to call smart contracts on omnichain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/GatewayZEVM.sol\":\"GatewayZEVM\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/Revert.sol\":{\"keccak256\":\"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409\",\"dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY\"]},\"contracts/zevm/GatewayZEVM.sol\":{\"keccak256\":\"0x772edf5c1c68d0ab0d338632eeb0e9f080943f4c3a06c6f5b49469ac3842d283\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a8f808566eb3d9fe6b5c3161e7a8b2157068667e5f81d1cf37167842b402436\",\"dweb:/ipfs/QmbqTG4TsbP9TCnjVPigAmm3bXgWvcGU5KrADHs3wdaGAB\"]},\"contracts/zevm/interfaces/IGatewayZEVM.sol\":{\"keccak256\":\"0xe9520cce7fbfe8abcc4922654cf82bde005f5836ba77209dd25e5b1650e676b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c1b38d6154acd0b167a5c7858f6b46178480b649511ed8103ab1fba7fda420ec\",\"dweb:/ipfs/QmeDBj5gYBAnsKsCwiNqV41wn88ksU9J2CFs3M79VUh2jS\"]},\"contracts/zevm/interfaces/IWZETA.sol\":{\"keccak256\":\"0x9c90341536af75438f7fa7aed65d0f5f56f87d5deee7fb6f4a07f4f23eb2a106\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3110b8de3e8cdcf871090659af3c31efb67048afabd689be3bb3295c172f680\",\"dweb:/ipfs/QmWxpzAxLguM8MtnD2kBo687KXaFBjJ5v2Qeshmmye4XoH\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]},\"contracts/zevm/interfaces/UniversalContract.sol\":{\"keccak256\":\"0x6523466b88f1bb8c5b59ba9b8915af533ccdd6c0eef91e4a9243ee0acc96b4b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9314040c4cae46ecdfa0d68f7e7c2cde4eb809b95bd6629ae731fc67f2d5285\",\"dweb:/ipfs/QmUCXokEgigBPwEGP93Q7XL2Evi3gYGr2P8UrdDKPPQhSS\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EmptyMessage"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"FailedZetaSent"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InsufficientZRC20Amount"},{"inputs":[],"type":"error","name":"InsufficientZetaAmount"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidTarget"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"OnlyWZETAOrFungible"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"WithdrawalFailed"},{"inputs":[],"type":"error","name":"ZRC20BurnFailed"},{"inputs":[],"type":"error","name":"ZRC20DepositFailed"},{"inputs":[],"type":"error","name":"ZRC20TransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"zrc20","type":"address","indexed":true},{"internalType":"bytes","name":"receiver","type":"bytes","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Called","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"chainId","type":"uint256","indexed":true},{"internalType":"bytes","name":"receiver","type":"bytes","indexed":false},{"internalType":"address","name":"zrc20","type":"address","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasfee","type":"uint256","indexed":false},{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Withdrawn","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FUNGIBLE_MODULE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"call"},{"inputs":[{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"depositAndRevert"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"execute"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"executeRevert"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"zetaToken_","type":"address"},{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdrawAndCall"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdrawAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaToken","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"params":{"gasLimit":"Gas limit.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"Address of zrc20 to pay fees."}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"deposit(address,uint256,address)":{"params":{"amount":"The amount of tokens to deposit.","target":"The target address to receive the deposited tokens.","zrc20":"The address of the ZRC20 token."}},"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"depositAndCall((bytes,address,uint256),uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call."}},"depositAndRevert(address,uint256,address,(address,uint64,bytes))":{"params":{"amount":"The amount of tokens to revert.","revertContext":"Revert context to pass to onRevert.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"execute((bytes,address,uint256),address,uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"executeRevert(address,(address,uint64,bytes))":{"params":{"revertContext":"Revert context to pass to onRevert.","target":"The target contract to call."}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Using admin to authorize upgrades and pause."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"The address of the ZRC20 token."}},"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options."}},"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","gasLimit":"Gas limit.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"The address of the ZRC20 token."}},"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","chainId":"Chain id of the external chain.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options."}}},"version":1},"userdoc":{"kind":"user","methods":{"FUNGIBLE_MODULE_ADDRESS()":{"notice":"The constant address of the Fungible module."},"PAUSER_ROLE()":{"notice":"New role identifier for pauser role."},"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"notice":"Call a smart contract on an external chain without asset transfer."},"deposit(address,uint256,address)":{"notice":"Deposit foreign coins into ZRC20."},"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":{"notice":"Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM."},"depositAndCall((bytes,address,uint256),uint256,address,bytes)":{"notice":"Deposit ZETA and call a user-specified contract on ZEVM."},"depositAndRevert(address,uint256,address,(address,uint64,bytes))":{"notice":"Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM."},"execute((bytes,address,uint256),address,uint256,address,bytes)":{"notice":"Execute a user-specified contract on ZEVM."},"executeRevert(address,(address,uint64,bytes))":{"notice":"Revert a user-specified contract on ZEVM."},"initialize(address,address)":{"notice":"Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE."},"pause()":{"notice":"Pause contract."},"unpause()":{"notice":"Unpause contract."},"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZRC20 tokens to an external chain."},"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZETA tokens to an external chain."},"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZRC20 tokens and call a smart contract on an external chain."},"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZETA tokens and call a smart contract on an external chain."},"zetaToken()":{"notice":"The address of the Zeta token."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/GatewayZEVM.sol":"GatewayZEVM"},"evmVersion":"london","libraries":{}},"sources":{"contracts/Revert.sol":{"keccak256":"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b","urls":["bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409","dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY"],"license":"MIT"},"contracts/zevm/GatewayZEVM.sol":{"keccak256":"0x772edf5c1c68d0ab0d338632eeb0e9f080943f4c3a06c6f5b49469ac3842d283","urls":["bzz-raw://7a8f808566eb3d9fe6b5c3161e7a8b2157068667e5f81d1cf37167842b402436","dweb:/ipfs/QmbqTG4TsbP9TCnjVPigAmm3bXgWvcGU5KrADHs3wdaGAB"],"license":"MIT"},"contracts/zevm/interfaces/IGatewayZEVM.sol":{"keccak256":"0xe9520cce7fbfe8abcc4922654cf82bde005f5836ba77209dd25e5b1650e676b0","urls":["bzz-raw://c1b38d6154acd0b167a5c7858f6b46178480b649511ed8103ab1fba7fda420ec","dweb:/ipfs/QmeDBj5gYBAnsKsCwiNqV41wn88ksU9J2CFs3M79VUh2jS"],"license":"MIT"},"contracts/zevm/interfaces/IWZETA.sol":{"keccak256":"0x9c90341536af75438f7fa7aed65d0f5f56f87d5deee7fb6f4a07f4f23eb2a106","urls":["bzz-raw://e3110b8de3e8cdcf871090659af3c31efb67048afabd689be3bb3295c172f680","dweb:/ipfs/QmWxpzAxLguM8MtnD2kBo687KXaFBjJ5v2Qeshmmye4XoH"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"},"contracts/zevm/interfaces/UniversalContract.sol":{"keccak256":"0x6523466b88f1bb8c5b59ba9b8915af533ccdd6c0eef91e4a9243ee0acc96b4b4","urls":["bzz-raw://f9314040c4cae46ecdfa0d68f7e7c2cde4eb809b95bd6629ae731fc67f2d5285","dweb:/ipfs/QmUCXokEgigBPwEGP93Q7XL2Evi3gYGr2P8UrdDKPPQhSS"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol":{"keccak256":"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97","urls":["bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007","dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74","urls":["bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45","dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":2515,"contract":"contracts/zevm/GatewayZEVM.sol:GatewayZEVM","label":"zetaToken","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"ast":{"absolutePath":"contracts/zevm/GatewayZEVM.sol","id":3463,"exportedSymbols":{"AccessControlUpgradeable":[44235],"ContextUpgradeable":[44717],"ERC165Upgradeable":[45062],"ERC1967Utils":[46098],"GatewayZEVM":[3462],"IAccessControl":[45441],"IERC1822Proxiable":[45620],"IGatewayZEVM":[4578],"IWETH9":[4708],"IZRC20":[4825],"Initializable":[44489],"PausableUpgradeable":[44893],"ReentrancyGuardUpgradeable":[45022],"RevertContext":[21],"RevertOptions":[13],"UUPSUpgradeable":[44671],"UniversalContract":[4947],"zContext":[4914]},"nodeType":"SourceUnit","src":"32:14420:10","nodes":[{"id":2476,"nodeType":"PragmaDirective","src":"32:23:10","nodes":[],"literals":["solidity","0.8",".26"]},{"id":2478,"nodeType":"ImportDirective","src":"57:61:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IGatewayZEVM.sol","file":"./interfaces/IGatewayZEVM.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4579,"symbolAliases":[{"foreign":{"id":2477,"name":"IGatewayZEVM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4578,"src":"66:12:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2481,"nodeType":"ImportDirective","src":"120:74:10","nodes":[],"absolutePath":"contracts/Revert.sol","file":"../../contracts/Revert.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":31,"symbolAliases":[{"foreign":{"id":2479,"name":"RevertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"129:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2480,"name":"RevertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"144:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2482,"nodeType":"ImportDirective","src":"195:33:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IWZETA.sol","file":"./interfaces/IWZETA.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4709,"symbolAliases":[],"unitAlias":""},{"id":2484,"nodeType":"ImportDirective","src":"229:49:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"./interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4904,"symbolAliases":[{"foreign":{"id":2483,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"238:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2487,"nodeType":"ImportDirective","src":"279:81:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/UniversalContract.sol","file":"./interfaces/UniversalContract.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4948,"symbolAliases":[{"foreign":{"id":2485,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"288:17:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2486,"name":"zContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4914,"src":"307:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2488,"nodeType":"ImportDirective","src":"361:81:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44236,"symbolAliases":[],"unitAlias":""},{"id":2489,"nodeType":"ImportDirective","src":"443:75:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44490,"symbolAliases":[],"unitAlias":""},{"id":2490,"nodeType":"ImportDirective","src":"519:77:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44672,"symbolAliases":[],"unitAlias":""},{"id":2491,"nodeType":"ImportDirective","src":"598:75:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44894,"symbolAliases":[],"unitAlias":""},{"id":2492,"nodeType":"ImportDirective","src":"674:82:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":45023,"symbolAliases":[],"unitAlias":""},{"id":3462,"nodeType":"ContractDefinition","src":"958:13493:10","nodes":[{"id":2508,"nodeType":"ErrorDefinition","src":"1194:20:10","nodes":[],"documentation":{"id":2506,"nodeType":"StructuredDocumentation","src":"1132:57:10","text":"@notice Error indicating a zero address was provided."},"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"1200:11:10","parameters":{"id":2507,"nodeType":"ParameterList","parameters":[],"src":"1211:2:10"}},{"id":2512,"nodeType":"VariableDeclaration","src":"1281:92:10","nodes":[],"constant":true,"documentation":{"id":2509,"nodeType":"StructuredDocumentation","src":"1220:56:10","text":"@notice The constant address of the Fungible module."},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"1305:23:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2510,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":2511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1331:42:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":2515,"nodeType":"VariableDeclaration","src":"1426:24:10","nodes":[],"constant":false,"documentation":{"id":2513,"nodeType":"StructuredDocumentation","src":"1379:42:10","text":"@notice The address of the Zeta token."},"functionSelector":"21e093b1","mutability":"mutable","name":"zetaToken","nameLocation":"1441:9:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2514,"name":"address","nodeType":"ElementaryTypeName","src":"1426:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":2521,"nodeType":"VariableDeclaration","src":"1510:62:10","nodes":[],"constant":true,"documentation":{"id":2516,"nodeType":"StructuredDocumentation","src":"1457:48:10","text":"@notice New role identifier for pauser role."},"functionSelector":"e63ab1e9","mutability":"constant","name":"PAUSER_ROLE","nameLocation":"1534:11:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1510:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5041555345525f524f4c45","id":2519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1558:13:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""},"value":"PAUSER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""}],"id":2518,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1548:9:10","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":2535,"nodeType":"ModifierDefinition","src":"1639:153:10","nodes":[],"body":{"id":2534,"nodeType":"Block","src":"1663:129:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2524,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1677:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1681:6:10","memberName":"sender","nodeType":"MemberAccess","src":"1677:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2526,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"1691:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1677:37:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2532,"nodeType":"IfStatement","src":"1673:102:10","trueBody":{"id":2531,"nodeType":"Block","src":"1716:59:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2528,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4411,"src":"1737:25:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1737:27:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2530,"nodeType":"RevertStatement","src":"1730:34:10"}]}},{"id":2533,"nodeType":"PlaceholderStatement","src":"1784:1:10"}]},"documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"1579:55:10","text":"@dev Only Fungible module address allowed modifier."},"name":"onlyFungible","nameLocation":"1648:12:10","parameters":{"id":2523,"nodeType":"ParameterList","parameters":[],"src":"1660:2:10"},"virtual":false,"visibility":"internal"},{"id":2543,"nodeType":"FunctionDefinition","src":"1851:53:10","nodes":[],"body":{"id":2542,"nodeType":"Block","src":"1865:39:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2539,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44457,"src":"1875:20:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1875:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2541,"nodeType":"ExpressionStatement","src":"1875:22:10"}]},"documentation":{"id":2536,"nodeType":"StructuredDocumentation","src":"1798:48:10","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2537,"nodeType":"ParameterList","parameters":[],"src":"1862:2:10"},"returnParameters":{"id":2538,"nodeType":"ParameterList","parameters":[],"src":"1865:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2598,"nodeType":"FunctionDefinition","src":"2067:439:10","nodes":[],"body":{"id":2597,"nodeType":"Block","src":"2142:364:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2553,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"2156:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2178:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2170:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2554,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:10","typeDescriptions":{}}},"id":2557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2170:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2156:24:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2559,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2184:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2202:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2194:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2560,"name":"address","nodeType":"ElementaryTypeName","src":"2194:7:10","typeDescriptions":{}}},"id":2563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2184:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2156:48:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2570,"nodeType":"IfStatement","src":"2152:99:10","trueBody":{"id":2569,"nodeType":"Block","src":"2206:45:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2566,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"2227:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2227:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2568,"nodeType":"RevertStatement","src":"2220:20:10"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2571,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44543,"src":"2260:22:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2260:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2573,"nodeType":"ExpressionStatement","src":"2260:24:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2574,"name":"__AccessControl_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43936,"src":"2294:20:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2294:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2576,"nodeType":"ExpressionStatement","src":"2294:22:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2577,"name":"__Pausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44769,"src":"2326:15:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2579,"nodeType":"ExpressionStatement","src":"2326:17:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2580,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44933,"src":"2353:22:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2353:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2582,"nodeType":"ExpressionStatement","src":"2353:24:10"},{"expression":{"arguments":[{"id":2584,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2399:18:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2585,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2419:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2583,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2388:10:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2388:38:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2587,"nodeType":"ExpressionStatement","src":"2388:38:10"},{"expression":{"arguments":[{"id":2589,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"2447:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2590,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2460:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2588,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2436:10:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2436:31:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2592,"nodeType":"ExpressionStatement","src":"2436:31:10"},{"expression":{"id":2595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2593,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"2477:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2594,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"2489:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2477:22:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2596,"nodeType":"ExpressionStatement","src":"2477:22:10"}]},"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"1910:152:10","text":"@notice Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\n @dev Using admin to authorize upgrades and pause."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":2551,"kind":"modifierInvocation","modifierName":{"id":2550,"name":"initializer","nameLocations":["2130:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":44343,"src":"2130:11:10"},"nodeType":"ModifierInvocation","src":"2130:11:10"}],"name":"initialize","nameLocation":"2076:10:10","parameters":{"id":2549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2546,"mutability":"mutable","name":"zetaToken_","nameLocation":"2095:10:10","nodeType":"VariableDeclaration","scope":2598,"src":"2087:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2545,"name":"address","nodeType":"ElementaryTypeName","src":"2087:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2548,"mutability":"mutable","name":"admin_","nameLocation":"2115:6:10","nodeType":"VariableDeclaration","scope":2598,"src":"2107:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2547,"name":"address","nodeType":"ElementaryTypeName","src":"2107:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2086:36:10"},"returnParameters":{"id":2552,"nodeType":"ParameterList","parameters":[],"src":"2142:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2609,"nodeType":"FunctionDefinition","src":"2637:104:10","nodes":[],"body":{"id":2608,"nodeType":"Block","src":"2738:3:10","nodes":[],"statements":[]},"baseFunctions":[44625],"documentation":{"id":2599,"nodeType":"StructuredDocumentation","src":"2512:120:10","text":"@dev Authorizes the upgrade of the contract.\n @param newImplementation The address of the new implementation."},"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2605,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2718:18:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2606,"kind":"modifierInvocation","modifierName":{"id":2604,"name":"onlyRole","nameLocations":["2709:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"2709:8:10"},"nodeType":"ModifierInvocation","src":"2709:28:10"}],"name":"_authorizeUpgrade","nameLocation":"2646:17:10","overrides":{"id":2603,"nodeType":"OverrideSpecifier","overrides":[],"src":"2700:8:10"},"parameters":{"id":2602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2601,"mutability":"mutable","name":"newImplementation","nameLocation":"2672:17:10","nodeType":"VariableDeclaration","scope":2609,"src":"2664:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2600,"name":"address","nodeType":"ElementaryTypeName","src":"2664:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2663:27:10"},"returnParameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"2738:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2629,"nodeType":"FunctionDefinition","src":"2816:156:10","nodes":[],"body":{"id":2628,"nodeType":"Block","src":"2857:115:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2615,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2871:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2875:6:10","memberName":"sender","nodeType":"MemberAccess","src":"2871:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2617,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"2885:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2871:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2619,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2898:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2902:6:10","memberName":"sender","nodeType":"MemberAccess","src":"2898:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2621,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"2912:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2898:37:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2871:64:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2627,"nodeType":"IfStatement","src":"2867:98:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2624,"name":"OnlyWZETAOrFungible","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4420,"src":"2944:19:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:21:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2626,"nodeType":"RevertStatement","src":"2937:28:10"}}]},"documentation":{"id":2610,"nodeType":"StructuredDocumentation","src":"2747:64:10","text":"@dev Receive function to receive ZETA from WETH9.withdraw()."},"implemented":true,"kind":"receive","modifiers":[{"id":2613,"kind":"modifierInvocation","modifierName":{"id":2612,"name":"whenNotPaused","nameLocations":["2843:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"2843:13:10"},"nodeType":"ModifierInvocation","src":"2843:13:10"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2611,"nodeType":"ParameterList","parameters":[],"src":"2823:2:10"},"returnParameters":{"id":2614,"nodeType":"ParameterList","parameters":[],"src":"2857:0:10"},"scope":3462,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":2640,"nodeType":"FunctionDefinition","src":"3010:73:10","nodes":[],"body":{"id":2639,"nodeType":"Block","src":"3058:25:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2636,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44868,"src":"3068:6:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3068:8:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2638,"nodeType":"ExpressionStatement","src":"3068:8:10"}]},"documentation":{"id":2630,"nodeType":"StructuredDocumentation","src":"2978:27:10","text":"@notice Pause contract."},"functionSelector":"8456cb59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2633,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"3045:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2634,"kind":"modifierInvocation","modifierName":{"id":2632,"name":"onlyRole","nameLocations":["3036:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3036:8:10"},"nodeType":"ModifierInvocation","src":"3036:21:10"}],"name":"pause","nameLocation":"3019:5:10","parameters":{"id":2631,"nodeType":"ParameterList","parameters":[],"src":"3024:2:10"},"returnParameters":{"id":2635,"nodeType":"ParameterList","parameters":[],"src":"3058:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2651,"nodeType":"FunctionDefinition","src":"3123:77:10","nodes":[],"body":{"id":2650,"nodeType":"Block","src":"3173:27:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2647,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"3183:8:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3183:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2649,"nodeType":"ExpressionStatement","src":"3183:10:10"}]},"documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"3089:29:10","text":"@notice Unpause contract."},"functionSelector":"3f4ba83a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2644,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"3160:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2645,"kind":"modifierInvocation","modifierName":{"id":2643,"name":"onlyRole","nameLocations":["3151:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3151:8:10"},"nodeType":"ModifierInvocation","src":"3151:21:10"}],"name":"unpause","nameLocation":"3132:7:10","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"3139:2:10"},"returnParameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"3173:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2672,"nodeType":"FunctionDefinition","src":"3420:210:10","nodes":[],"body":{"id":2671,"nodeType":"Block","src":"3502:128:10","nodes":[],"statements":[{"expression":{"arguments":[{"id":2662,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2654,"src":"3582:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2663,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"3590:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2665,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"3604:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2664,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"3597:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3611:9:10","memberName":"GAS_LIMIT","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"3597:23:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2661,"name":"_withdrawZRC20WithGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"3555:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,uint256) returns (uint256)"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3555:68:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2660,"id":2670,"nodeType":"Return","src":"3548:75:10"}]},"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"3206:209:10","text":"@dev Internal function to withdraw ZRC20 tokens.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @return The gas fee for the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawZRC20","nameLocation":"3429:14:10","parameters":{"id":2657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2654,"mutability":"mutable","name":"amount","nameLocation":"3452:6:10","nodeType":"VariableDeclaration","scope":2672,"src":"3444:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2653,"name":"uint256","nodeType":"ElementaryTypeName","src":"3444:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2656,"mutability":"mutable","name":"zrc20","nameLocation":"3468:5:10","nodeType":"VariableDeclaration","scope":2672,"src":"3460:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2655,"name":"address","nodeType":"ElementaryTypeName","src":"3460:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3443:31:10"},"returnParameters":{"id":2660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2672,"src":"3493:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2658,"name":"uint256","nodeType":"ElementaryTypeName","src":"3493:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3492:9:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2742,"nodeType":"FunctionDefinition","src":"3900:583:10","nodes":[],"body":{"id":2741,"nodeType":"Block","src":"4012:471:10","nodes":[],"statements":[{"assignments":[2685,2687],"declarations":[{"constant":false,"id":2685,"mutability":"mutable","name":"gasZRC20","nameLocation":"4031:8:10","nodeType":"VariableDeclaration","scope":2741,"src":"4023:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2684,"name":"address","nodeType":"ElementaryTypeName","src":"4023:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2687,"mutability":"mutable","name":"gasFee","nameLocation":"4049:6:10","nodeType":"VariableDeclaration","scope":2741,"src":"4041:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2686,"name":"uint256","nodeType":"ElementaryTypeName","src":"4041:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2694,"initialValue":{"arguments":[{"id":2692,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4100:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2689,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4066:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2688,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4059:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4073:26:10","memberName":"withdrawGasFeeWithGasLimit","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"4059:40:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$","typeString":"function (uint256) view external returns (address,uint256)"}},"id":2693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:50:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4022:87:10"},{"condition":{"id":2704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4123:75:10","subExpression":{"arguments":[{"expression":{"id":2699,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4154:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4158:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4154:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2701,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"4166:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2702,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4191:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2696,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"4131:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2695,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4124:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4141:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"4124:29:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:74:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2709,"nodeType":"IfStatement","src":"4119:135:10","trueBody":{"id":2708,"nodeType":"Block","src":"4200:54:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2705,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"4221:20:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4221:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2707,"nodeType":"RevertStatement","src":"4214:29:10"}]}},{"condition":{"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4268:62:10","subExpression":{"arguments":[{"expression":{"id":2714,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4296:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4300:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4296:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2718,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4316:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":2717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4308:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2716,"name":"address","nodeType":"ElementaryTypeName","src":"4308:7:10","typeDescriptions":{}}},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4308:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2720,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"4323:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2711,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4276:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2710,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4269:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"4269:26:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:61:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2727,"nodeType":"IfStatement","src":"4264:121:10","trueBody":{"id":2726,"nodeType":"Block","src":"4332:53:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2723,"name":"ZRC20TransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"4353:19:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4353:21:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2725,"nodeType":"RevertStatement","src":"4346:28:10"}]}},{"condition":{"id":2734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4399:27:10","subExpression":{"arguments":[{"id":2732,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"4419:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2729,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4407:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2728,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4400:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4414:4:10","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":4777,"src":"4400:18:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) external returns (bool)"}},"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:26:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2738,"nodeType":"IfStatement","src":"4395:57:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2735,"name":"ZRC20BurnFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4399,"src":"4435:15:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4435:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2737,"nodeType":"RevertStatement","src":"4428:24:10"}},{"expression":{"id":2739,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4470:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2683,"id":2740,"nodeType":"Return","src":"4463:13:10"}]},"documentation":{"id":2673,"nodeType":"StructuredDocumentation","src":"3636:259:10","text":"@dev Internal function to withdraw ZRC20 tokens with gas limit.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param gasLimit Gas limit.\n @return The gas fee for the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawZRC20WithGasLimit","nameLocation":"3909:26:10","parameters":{"id":2680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2675,"mutability":"mutable","name":"amount","nameLocation":"3944:6:10","nodeType":"VariableDeclaration","scope":2742,"src":"3936:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2674,"name":"uint256","nodeType":"ElementaryTypeName","src":"3936:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2677,"mutability":"mutable","name":"zrc20","nameLocation":"3960:5:10","nodeType":"VariableDeclaration","scope":2742,"src":"3952:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2676,"name":"address","nodeType":"ElementaryTypeName","src":"3952:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2679,"mutability":"mutable","name":"gasLimit","nameLocation":"3975:8:10","nodeType":"VariableDeclaration","scope":2742,"src":"3967:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3967:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3935:49:10"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2742,"src":"4003:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2681,"name":"uint256","nodeType":"ElementaryTypeName","src":"4003:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4002:9:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2790,"nodeType":"FunctionDefinition","src":"4658:313:10","nodes":[],"body":{"id":2789,"nodeType":"Block","src":"4718:253:10","nodes":[],"statements":[{"condition":{"id":2762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4732:66:10","subExpression":{"arguments":[{"expression":{"id":2754,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4764:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4768:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4764:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2758,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4784:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":2757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2756,"name":"address","nodeType":"ElementaryTypeName","src":"4776:7:10","typeDescriptions":{}}},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4776:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2760,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4791:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2751,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4740:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2750,"name":"IWETH9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4708,"src":"4733:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH9_$4708_$","typeString":"type(contract IWETH9)"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH9_$4708","typeString":"contract IWETH9"}},"id":2753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4751:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4699,"src":"4733:30:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:65:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2766,"nodeType":"IfStatement","src":"4728:95:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2763,"name":"FailedZetaSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4807:14:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4807:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2765,"nodeType":"RevertStatement","src":"4800:23:10"}},{"expression":{"arguments":[{"id":2771,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4860:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2768,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4840:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2767,"name":"IWETH9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4708,"src":"4833:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH9_$4708_$","typeString":"type(contract IWETH9)"}},"id":2769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH9_$4708","typeString":"contract IWETH9"}},"id":2770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4851:8:10","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":4707,"src":"4833:26:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:34:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2773,"nodeType":"ExpressionStatement","src":"4833:34:10"},{"assignments":[2775,null],"declarations":[{"constant":false,"id":2775,"mutability":"mutable","name":"sent","nameLocation":"4883:4:10","nodeType":"VariableDeclaration","scope":2789,"src":"4878:9:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2774,"name":"bool","nodeType":"ElementaryTypeName","src":"4878:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2782,"initialValue":{"arguments":[{"hexValue":"","id":2780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4917:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2776,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"4892:2:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:4:10","memberName":"call","nodeType":"MemberAccess","src":"4892:7:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2778,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4908:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4892:24:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4892:28:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4877:43:10"},{"condition":{"id":2784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4934:5:10","subExpression":{"id":2783,"name":"sent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"4935:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2788,"nodeType":"IfStatement","src":"4930:34:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2785,"name":"FailedZetaSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4948:14:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4948:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2787,"nodeType":"RevertStatement","src":"4941:23:10"}}]},"documentation":{"id":2743,"nodeType":"StructuredDocumentation","src":"4489:164:10","text":"@dev Internal function to transfer ZETA tokens.\n @param amount The amount of tokens to transfer.\n @param to The address to transfer the tokens to."},"implemented":true,"kind":"function","modifiers":[],"name":"_transferZETA","nameLocation":"4667:13:10","parameters":{"id":2748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2745,"mutability":"mutable","name":"amount","nameLocation":"4689:6:10","nodeType":"VariableDeclaration","scope":2790,"src":"4681:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2744,"name":"uint256","nodeType":"ElementaryTypeName","src":"4681:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2747,"mutability":"mutable","name":"to","nameLocation":"4705:2:10","nodeType":"VariableDeclaration","scope":2790,"src":"4697:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2746,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4680:28:10"},"returnParameters":{"id":2749,"nodeType":"ParameterList","parameters":[],"src":"4718:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2852,"nodeType":"FunctionDefinition","src":"5259:674:10","nodes":[],"body":{"id":2851,"nodeType":"Block","src":"5471:462:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2807,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"5485:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5494:6:10","memberName":"length","nodeType":"MemberAccess","src":"5485:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5504:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5485:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2814,"nodeType":"IfStatement","src":"5481:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2811,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"5514:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5514:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2813,"nodeType":"RevertStatement","src":"5507:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5541:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5551:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5541:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2821,"nodeType":"IfStatement","src":"5537:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2818,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"5561:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5561:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2820,"nodeType":"RevertStatement","src":"5554:32:10"}},{"assignments":[2823],"declarations":[{"constant":false,"id":2823,"mutability":"mutable","name":"gasFee","nameLocation":"5605:6:10","nodeType":"VariableDeclaration","scope":2851,"src":"5597:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2822,"name":"uint256","nodeType":"ElementaryTypeName","src":"5597:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2828,"initialValue":{"arguments":[{"id":2825,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5629:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2826,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5637:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2824,"name":"_withdrawZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"5614:14:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) returns (uint256)"}},"id":2827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5614:29:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5597:46:10"},{"eventCall":{"arguments":[{"expression":{"id":2830,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5681:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5685:6:10","memberName":"sender","nodeType":"MemberAccess","src":"5681:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5705:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2833,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"5720:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2834,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5742:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2835,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5761:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2836,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2823,"src":"5781:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2838,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5808:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2837,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"5801:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5815:17:10","memberName":"PROTOCOL_FLAT_FEE","nodeType":"MemberAccess","referencedDeclaration":4808,"src":"5801:31:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":2842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5848:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2844,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5871:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2843,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"5864:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5864:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5878:9:10","memberName":"GAS_LIMIT","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"5864:23:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5864:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2848,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2800,"src":"5903:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2829,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"5658:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5658:268:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2850,"nodeType":"EmitStatement","src":"5653:273:10"}]},"baseFunctions":[4442],"documentation":{"id":2791,"nodeType":"StructuredDocumentation","src":"4977:277:10","text":"@notice Withdraw ZRC20 tokens to an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param revertOptions Revert options."},"functionSelector":"7c0dcb5f","implemented":true,"kind":"function","modifiers":[{"id":2803,"kind":"modifierInvocation","modifierName":{"id":2802,"name":"nonReentrant","nameLocations":["5432:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"5432:12:10"},"nodeType":"ModifierInvocation","src":"5432:12:10"},{"id":2805,"kind":"modifierInvocation","modifierName":{"id":2804,"name":"whenNotPaused","nameLocations":["5453:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"5453:13:10"},"nodeType":"ModifierInvocation","src":"5453:13:10"}],"name":"withdraw","nameLocation":"5268:8:10","parameters":{"id":2801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2793,"mutability":"mutable","name":"receiver","nameLocation":"5299:8:10","nodeType":"VariableDeclaration","scope":2852,"src":"5286:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2792,"name":"bytes","nodeType":"ElementaryTypeName","src":"5286:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2795,"mutability":"mutable","name":"amount","nameLocation":"5325:6:10","nodeType":"VariableDeclaration","scope":2852,"src":"5317:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2794,"name":"uint256","nodeType":"ElementaryTypeName","src":"5317:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2797,"mutability":"mutable","name":"zrc20","nameLocation":"5349:5:10","nodeType":"VariableDeclaration","scope":2852,"src":"5341:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2796,"name":"address","nodeType":"ElementaryTypeName","src":"5341:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2800,"mutability":"mutable","name":"revertOptions","nameLocation":"5387:13:10","nodeType":"VariableDeclaration","scope":2852,"src":"5364:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2799,"nodeType":"UserDefinedTypeName","pathNode":{"id":2798,"name":"RevertOptions","nameLocations":["5364:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"5364:13:10"},"referencedDeclaration":13,"src":"5364:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"5276:130:10"},"returnParameters":{"id":2806,"nodeType":"ParameterList","parameters":[],"src":"5471:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2915,"nodeType":"FunctionDefinition","src":"6348:749:10","nodes":[],"body":{"id":2914,"nodeType":"Block","src":"6625:472:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2873,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"6639:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6648:6:10","memberName":"length","nodeType":"MemberAccess","src":"6639:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6658:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6639:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2880,"nodeType":"IfStatement","src":"6635:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2877,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"6668:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6668:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2879,"nodeType":"RevertStatement","src":"6661:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2881,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6695:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6705:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6695:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2887,"nodeType":"IfStatement","src":"6691:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2884,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"6715:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2886,"nodeType":"RevertStatement","src":"6708:32:10"}},{"assignments":[2889],"declarations":[{"constant":false,"id":2889,"mutability":"mutable","name":"gasFee","nameLocation":"6759:6:10","nodeType":"VariableDeclaration","scope":2914,"src":"6751:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2888,"name":"uint256","nodeType":"ElementaryTypeName","src":"6751:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2895,"initialValue":{"arguments":[{"id":2891,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6795:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2892,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6803:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2893,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"6810:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2890,"name":"_withdrawZRC20WithGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"6768:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,uint256) returns (uint256)"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:51:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6751:68:10"},{"eventCall":{"arguments":[{"expression":{"id":2897,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6857:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6861:6:10","memberName":"sender","nodeType":"MemberAccess","src":"6857:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6881:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2900,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"6896:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2901,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6918:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2902,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6937:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2903,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"6957:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2905,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6984:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2904,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"6977:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6977:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6991:17:10","memberName":"PROTOCOL_FLAT_FEE","nodeType":"MemberAccess","referencedDeclaration":4808,"src":"6977:31:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6977:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2909,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"7024:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2910,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"7045:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2911,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"7067:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2896,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"6834:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6834:256:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2913,"nodeType":"EmitStatement","src":"6829:261:10"}]},"baseFunctions":[4472],"documentation":{"id":2853,"nodeType":"StructuredDocumentation","src":"5939:404:10","text":"@notice Withdraw ZRC20 tokens and call a smart contract on an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param message The calldata to pass to the contract call.\n @param gasLimit Gas limit.\n @param revertOptions Revert options."},"functionSelector":"048ae42c","implemented":true,"kind":"function","modifiers":[{"id":2869,"kind":"modifierInvocation","modifierName":{"id":2868,"name":"nonReentrant","nameLocations":["6586:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"6586:12:10"},"nodeType":"ModifierInvocation","src":"6586:12:10"},{"id":2871,"kind":"modifierInvocation","modifierName":{"id":2870,"name":"whenNotPaused","nameLocations":["6607:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"6607:13:10"},"nodeType":"ModifierInvocation","src":"6607:13:10"}],"name":"withdrawAndCall","nameLocation":"6357:15:10","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2855,"mutability":"mutable","name":"receiver","nameLocation":"6395:8:10","nodeType":"VariableDeclaration","scope":2915,"src":"6382:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2854,"name":"bytes","nodeType":"ElementaryTypeName","src":"6382:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2857,"mutability":"mutable","name":"amount","nameLocation":"6421:6:10","nodeType":"VariableDeclaration","scope":2915,"src":"6413:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2856,"name":"uint256","nodeType":"ElementaryTypeName","src":"6413:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2859,"mutability":"mutable","name":"zrc20","nameLocation":"6445:5:10","nodeType":"VariableDeclaration","scope":2915,"src":"6437:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2858,"name":"address","nodeType":"ElementaryTypeName","src":"6437:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2861,"mutability":"mutable","name":"message","nameLocation":"6475:7:10","nodeType":"VariableDeclaration","scope":2915,"src":"6460:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2860,"name":"bytes","nodeType":"ElementaryTypeName","src":"6460:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2863,"mutability":"mutable","name":"gasLimit","nameLocation":"6500:8:10","nodeType":"VariableDeclaration","scope":2915,"src":"6492:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2862,"name":"uint256","nodeType":"ElementaryTypeName","src":"6492:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2866,"mutability":"mutable","name":"revertOptions","nameLocation":"6541:13:10","nodeType":"VariableDeclaration","scope":2915,"src":"6518:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2865,"nodeType":"UserDefinedTypeName","pathNode":{"id":2864,"name":"RevertOptions","nameLocations":["6518:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"6518:13:10"},"referencedDeclaration":13,"src":"6518:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"6372:188:10"},"returnParameters":{"id":2872,"nodeType":"ParameterList","parameters":[],"src":"6625:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2970,"nodeType":"FunctionDefinition","src":"7331:503:10","nodes":[],"body":{"id":2969,"nodeType":"Block","src":"7545:289:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2932,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"7559:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7568:6:10","memberName":"length","nodeType":"MemberAccess","src":"7559:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7578:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7559:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2939,"nodeType":"IfStatement","src":"7555:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2936,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"7588:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7588:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2938,"nodeType":"RevertStatement","src":"7581:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2940,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7615:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7625:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7615:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2946,"nodeType":"IfStatement","src":"7611:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2943,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"7635:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7635:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2945,"nodeType":"RevertStatement","src":"7628:31:10"}},{"expression":{"arguments":[{"id":2948,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7684:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2949,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"7692:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2947,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"7670:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":2950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7670:46:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2951,"nodeType":"ExpressionStatement","src":"7670:46:10"},{"eventCall":{"arguments":[{"expression":{"id":2953,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7741:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7745:6:10","memberName":"sender","nodeType":"MemberAccess","src":"7741:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2955,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"7753:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2956,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"7762:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":2959,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"7780:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7772:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2957,"name":"address","nodeType":"ElementaryTypeName","src":"7772:7:10","typeDescriptions":{}}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7772:18:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2961,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7792:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":2962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7800:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7803:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"","id":2964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7806:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"hexValue":"30","id":2965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7810:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2966,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"7813:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2952,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"7731:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7731:96:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2968,"nodeType":"EmitStatement","src":"7726:101:10"}]},"baseFunctions":[4455],"documentation":{"id":2916,"nodeType":"StructuredDocumentation","src":"7103:223:10","text":"@notice Withdraw ZETA tokens to an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param revertOptions Revert options."},"functionSelector":"97a1cef1","implemented":true,"kind":"function","modifiers":[{"id":2928,"kind":"modifierInvocation","modifierName":{"id":2927,"name":"nonReentrant","nameLocations":["7506:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"7506:12:10"},"nodeType":"ModifierInvocation","src":"7506:12:10"},{"id":2930,"kind":"modifierInvocation","modifierName":{"id":2929,"name":"whenNotPaused","nameLocations":["7527:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"7527:13:10"},"nodeType":"ModifierInvocation","src":"7527:13:10"}],"name":"withdraw","nameLocation":"7340:8:10","parameters":{"id":2926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"mutability":"mutable","name":"receiver","nameLocation":"7371:8:10","nodeType":"VariableDeclaration","scope":2970,"src":"7358:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2917,"name":"bytes","nodeType":"ElementaryTypeName","src":"7358:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2920,"mutability":"mutable","name":"amount","nameLocation":"7397:6:10","nodeType":"VariableDeclaration","scope":2970,"src":"7389:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2919,"name":"uint256","nodeType":"ElementaryTypeName","src":"7389:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2922,"mutability":"mutable","name":"chainId","nameLocation":"7421:7:10","nodeType":"VariableDeclaration","scope":2970,"src":"7413:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2921,"name":"uint256","nodeType":"ElementaryTypeName","src":"7413:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2925,"mutability":"mutable","name":"revertOptions","nameLocation":"7461:13:10","nodeType":"VariableDeclaration","scope":2970,"src":"7438:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2924,"nodeType":"UserDefinedTypeName","pathNode":{"id":2923,"name":"RevertOptions","nameLocations":["7438:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"7438:13:10"},"referencedDeclaration":13,"src":"7438:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"7348:132:10"},"returnParameters":{"id":2931,"nodeType":"ParameterList","parameters":[],"src":"7545:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3027,"nodeType":"FunctionDefinition","src":"8215:547:10","nodes":[],"body":{"id":3026,"nodeType":"Block","src":"8468:294:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2989,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"8482:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8491:6:10","memberName":"length","nodeType":"MemberAccess","src":"8482:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8501:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8482:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2996,"nodeType":"IfStatement","src":"8478:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2993,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"8511:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8511:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2995,"nodeType":"RevertStatement","src":"8504:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2997,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8538:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8548:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8538:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3003,"nodeType":"IfStatement","src":"8534:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3000,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"8558:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8558:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3002,"nodeType":"RevertStatement","src":"8551:31:10"}},{"expression":{"arguments":[{"id":3005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8607:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3006,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"8615:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3004,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"8593:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8593:46:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3008,"nodeType":"ExpressionStatement","src":"8593:46:10"},{"eventCall":{"arguments":[{"expression":{"id":3010,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8664:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8668:6:10","memberName":"sender","nodeType":"MemberAccess","src":"8664:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3012,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2977,"src":"8676:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3013,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"8685:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":3016,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"8703:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8695:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3014,"name":"address","nodeType":"ElementaryTypeName","src":"8695:7:10","typeDescriptions":{}}},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8695:18:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3018,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8715:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":3019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8723:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8726:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3021,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2979,"src":"8729:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30","id":3022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8738:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3023,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2982,"src":"8741:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":3009,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"8654:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8654:101:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3025,"nodeType":"EmitStatement","src":"8649:106:10"}]},"baseFunctions":[4487],"documentation":{"id":2971,"nodeType":"StructuredDocumentation","src":"7840:370:10","text":"@notice Withdraw ZETA tokens and call a smart contract on an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param chainId Chain id of the external chain.\n @param message The calldata to pass to the contract call.\n @param revertOptions Revert options."},"functionSelector":"3b283933","implemented":true,"kind":"function","modifiers":[{"id":2985,"kind":"modifierInvocation","modifierName":{"id":2984,"name":"nonReentrant","nameLocations":["8429:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8429:12:10"},"nodeType":"ModifierInvocation","src":"8429:12:10"},{"id":2987,"kind":"modifierInvocation","modifierName":{"id":2986,"name":"whenNotPaused","nameLocations":["8450:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8450:13:10"},"nodeType":"ModifierInvocation","src":"8450:13:10"}],"name":"withdrawAndCall","nameLocation":"8224:15:10","parameters":{"id":2983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2973,"mutability":"mutable","name":"receiver","nameLocation":"8262:8:10","nodeType":"VariableDeclaration","scope":3027,"src":"8249:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2972,"name":"bytes","nodeType":"ElementaryTypeName","src":"8249:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2975,"mutability":"mutable","name":"amount","nameLocation":"8288:6:10","nodeType":"VariableDeclaration","scope":3027,"src":"8280:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2974,"name":"uint256","nodeType":"ElementaryTypeName","src":"8280:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2977,"mutability":"mutable","name":"chainId","nameLocation":"8312:7:10","nodeType":"VariableDeclaration","scope":3027,"src":"8304:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2976,"name":"uint256","nodeType":"ElementaryTypeName","src":"8304:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2979,"mutability":"mutable","name":"message","nameLocation":"8344:7:10","nodeType":"VariableDeclaration","scope":3027,"src":"8329:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2978,"name":"bytes","nodeType":"ElementaryTypeName","src":"8329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2982,"mutability":"mutable","name":"revertOptions","nameLocation":"8384:13:10","nodeType":"VariableDeclaration","scope":3027,"src":"8361:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2981,"nodeType":"UserDefinedTypeName","pathNode":{"id":2980,"name":"RevertOptions","nameLocations":["8361:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8361:13:10"},"referencedDeclaration":13,"src":"8361:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8239:164:10"},"returnParameters":{"id":2988,"nodeType":"ParameterList","parameters":[],"src":"8468:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3099,"nodeType":"FunctionDefinition","src":"9116:688:10","nodes":[],"body":{"id":3098,"nodeType":"Block","src":"9358:446:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3046,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"9372:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9381:6:10","memberName":"length","nodeType":"MemberAccess","src":"9372:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9372:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3053,"nodeType":"IfStatement","src":"9368:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3050,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"9401:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9401:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3052,"nodeType":"RevertStatement","src":"9394:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3054,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"9428:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9436:6:10","memberName":"length","nodeType":"MemberAccess","src":"9428:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9446:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9428:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3061,"nodeType":"IfStatement","src":"9424:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3058,"name":"EmptyMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4423,"src":"9456:12:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3060,"nodeType":"RevertStatement","src":"9449:21:10"}},{"assignments":[3063,3065],"declarations":[{"constant":false,"id":3063,"mutability":"mutable","name":"gasZRC20","nameLocation":"9490:8:10","nodeType":"VariableDeclaration","scope":3098,"src":"9482:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3062,"name":"address","nodeType":"ElementaryTypeName","src":"9482:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3065,"mutability":"mutable","name":"gasFee","nameLocation":"9508:6:10","nodeType":"VariableDeclaration","scope":3098,"src":"9500:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3064,"name":"uint256","nodeType":"ElementaryTypeName","src":"9500:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3072,"initialValue":{"arguments":[{"id":3070,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"9559:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3067,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"9525:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3066,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"9518:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9518:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9532:26:10","memberName":"withdrawGasFeeWithGasLimit","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"9518:40:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$","typeString":"function (uint256) view external returns (address,uint256)"}},"id":3071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9518:50:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"9481:87:10"},{"condition":{"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9582:75:10","subExpression":{"arguments":[{"expression":{"id":3077,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9613:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9617:6:10","memberName":"sender","nodeType":"MemberAccess","src":"9613:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3079,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"9625:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3080,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"9650:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3074,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"9590:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3073,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"9583:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9600:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"9583:29:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:74:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3087,"nodeType":"IfStatement","src":"9578:135:10","trueBody":{"id":3086,"nodeType":"Block","src":"9659:54:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3083,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"9680:20:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9680:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3085,"nodeType":"RevertStatement","src":"9673:29:10"}]}},{"eventCall":{"arguments":[{"expression":{"id":3089,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9735:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9739:6:10","memberName":"sender","nodeType":"MemberAccess","src":"9735:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3091,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"9747:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3092,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"9754:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3093,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"9764:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":3094,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"9773:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3095,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3039,"src":"9783:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":3088,"name":"Called","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4361,"src":"9728:6:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,bytes memory,uint256,struct RevertOptions memory)"}},"id":3096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9728:69:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3097,"nodeType":"EmitStatement","src":"9723:74:10"}]},"baseFunctions":[4502],"documentation":{"id":3028,"nodeType":"StructuredDocumentation","src":"8768:343:10","text":"@notice Call a smart contract on an external chain without asset transfer.\n @param receiver The receiver address on the external chain.\n @param zrc20 Address of zrc20 to pay fees.\n @param message The calldata to pass to the contract call.\n @param gasLimit Gas limit.\n @param revertOptions Revert options."},"functionSelector":"1cb5ea75","implemented":true,"kind":"function","modifiers":[{"id":3042,"kind":"modifierInvocation","modifierName":{"id":3041,"name":"nonReentrant","nameLocations":["9319:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"9319:12:10"},"nodeType":"ModifierInvocation","src":"9319:12:10"},{"id":3044,"kind":"modifierInvocation","modifierName":{"id":3043,"name":"whenNotPaused","nameLocations":["9340:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"9340:13:10"},"nodeType":"ModifierInvocation","src":"9340:13:10"}],"name":"call","nameLocation":"9125:4:10","parameters":{"id":3040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3030,"mutability":"mutable","name":"receiver","nameLocation":"9152:8:10","nodeType":"VariableDeclaration","scope":3099,"src":"9139:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3029,"name":"bytes","nodeType":"ElementaryTypeName","src":"9139:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3032,"mutability":"mutable","name":"zrc20","nameLocation":"9178:5:10","nodeType":"VariableDeclaration","scope":3099,"src":"9170:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3031,"name":"address","nodeType":"ElementaryTypeName","src":"9170:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3034,"mutability":"mutable","name":"message","nameLocation":"9208:7:10","nodeType":"VariableDeclaration","scope":3099,"src":"9193:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3033,"name":"bytes","nodeType":"ElementaryTypeName","src":"9193:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3036,"mutability":"mutable","name":"gasLimit","nameLocation":"9233:8:10","nodeType":"VariableDeclaration","scope":3099,"src":"9225:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3035,"name":"uint256","nodeType":"ElementaryTypeName","src":"9225:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3039,"mutability":"mutable","name":"revertOptions","nameLocation":"9274:13:10","nodeType":"VariableDeclaration","scope":3099,"src":"9251:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":3038,"nodeType":"UserDefinedTypeName","pathNode":{"id":3037,"name":"RevertOptions","nameLocations":["9251:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"9251:13:10"},"referencedDeclaration":13,"src":"9251:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"9129:164:10"},"returnParameters":{"id":3045,"nodeType":"ParameterList","parameters":[],"src":"9358:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3164,"nodeType":"FunctionDefinition","src":"10042:426:10","nodes":[],"body":{"id":3163,"nodeType":"Block","src":"10142:326:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3113,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"10156:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10173:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10165:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3114,"name":"address","nodeType":"ElementaryTypeName","src":"10165:7:10","typeDescriptions":{}}},"id":3117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10165:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10156:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3119,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10179:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3120,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:10","typeDescriptions":{}}},"id":3123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10179:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10156:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3129,"nodeType":"IfStatement","src":"10152:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3126,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"10208:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10208:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3128,"nodeType":"RevertStatement","src":"10201:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"10235:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10245:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10235:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3136,"nodeType":"IfStatement","src":"10231:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3133,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"10255:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10255:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3135,"nodeType":"RevertStatement","src":"10248:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3137,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10295:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3138,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"10305:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10295:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3140,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10332:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3143,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10350:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10342:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3141,"name":"address","nodeType":"ElementaryTypeName","src":"10342:7:10","typeDescriptions":{}}},"id":3144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10342:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10332:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10295:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3150,"nodeType":"IfStatement","src":"10291:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3147,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"10364:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10364:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3149,"nodeType":"RevertStatement","src":"10357:22:10"}},{"condition":{"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10394:38:10","subExpression":{"arguments":[{"id":3155,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10417:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3156,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"10425:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3152,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"10402:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3151,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10395:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10395:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10409:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"10395:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10395:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3162,"nodeType":"IfStatement","src":"10390:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3159,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"10441:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10441:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3161,"nodeType":"RevertStatement","src":"10434:27:10"}}]},"baseFunctions":[4512],"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"9810:227:10","text":"@notice Deposit foreign coins into ZRC20.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to deposit.\n @param target The target address to receive the deposited tokens."},"functionSelector":"f45346dc","implemented":true,"kind":"function","modifiers":[{"id":3109,"kind":"modifierInvocation","modifierName":{"id":3108,"name":"onlyFungible","nameLocations":["10115:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"10115:12:10"},"nodeType":"ModifierInvocation","src":"10115:12:10"},{"id":3111,"kind":"modifierInvocation","modifierName":{"id":3110,"name":"whenNotPaused","nameLocations":["10128:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"10128:13:10"},"nodeType":"ModifierInvocation","src":"10128:13:10"}],"name":"deposit","nameLocation":"10051:7:10","parameters":{"id":3107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3102,"mutability":"mutable","name":"zrc20","nameLocation":"10067:5:10","nodeType":"VariableDeclaration","scope":3164,"src":"10059:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3101,"name":"address","nodeType":"ElementaryTypeName","src":"10059:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3104,"mutability":"mutable","name":"amount","nameLocation":"10082:6:10","nodeType":"VariableDeclaration","scope":3164,"src":"10074:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3103,"name":"uint256","nodeType":"ElementaryTypeName","src":"10074:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3106,"mutability":"mutable","name":"target","nameLocation":"10098:6:10","nodeType":"VariableDeclaration","scope":3164,"src":"10090:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3105,"name":"address","nodeType":"ElementaryTypeName","src":"10090:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10058:47:10"},"returnParameters":{"id":3112,"nodeType":"ParameterList","parameters":[],"src":"10142:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3211,"nodeType":"FunctionDefinition","src":"10819:397:10","nodes":[],"body":{"id":3210,"nodeType":"Block","src":"11044:172:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3183,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3170,"src":"11058:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11075:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11067:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3184,"name":"address","nodeType":"ElementaryTypeName","src":"11067:7:10","typeDescriptions":{}}},"id":3187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11067:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11058:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3189,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"11081:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11099:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11091:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3190,"name":"address","nodeType":"ElementaryTypeName","src":"11091:7:10","typeDescriptions":{}}},"id":3193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11091:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11081:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11058:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3199,"nodeType":"IfStatement","src":"11054:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3196,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"11110:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11110:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3198,"nodeType":"RevertStatement","src":"11103:20:10"}},{"expression":{"arguments":[{"id":3204,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"11177:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3205,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3170,"src":"11186:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3206,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3172,"src":"11193:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3207,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3176,"src":"11201:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3201,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"11152:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3200,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"11134:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11134:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11160:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"11134:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11134:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3209,"nodeType":"ExpressionStatement","src":"11134:75:10"}]},"baseFunctions":[4527],"documentation":{"id":3165,"nodeType":"StructuredDocumentation","src":"10474:340:10","text":"@notice Execute a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"bcf7f32b","implemented":true,"kind":"function","modifiers":[{"id":3179,"kind":"modifierInvocation","modifierName":{"id":3178,"name":"onlyFungible","nameLocations":["11005:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"11005:12:10"},"nodeType":"ModifierInvocation","src":"11005:12:10"},{"id":3181,"kind":"modifierInvocation","modifierName":{"id":3180,"name":"whenNotPaused","nameLocations":["11026:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11026:13:10"},"nodeType":"ModifierInvocation","src":"11026:13:10"}],"name":"execute","nameLocation":"10828:7:10","parameters":{"id":3177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3168,"mutability":"mutable","name":"context","nameLocation":"10863:7:10","nodeType":"VariableDeclaration","scope":3211,"src":"10845:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3167,"nodeType":"UserDefinedTypeName","pathNode":{"id":3166,"name":"zContext","nameLocations":["10845:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"10845:8:10"},"referencedDeclaration":4914,"src":"10845:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3170,"mutability":"mutable","name":"zrc20","nameLocation":"10888:5:10","nodeType":"VariableDeclaration","scope":3211,"src":"10880:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3169,"name":"address","nodeType":"ElementaryTypeName","src":"10880:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3172,"mutability":"mutable","name":"amount","nameLocation":"10911:6:10","nodeType":"VariableDeclaration","scope":3211,"src":"10903:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3171,"name":"uint256","nodeType":"ElementaryTypeName","src":"10903:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3174,"mutability":"mutable","name":"target","nameLocation":"10935:6:10","nodeType":"VariableDeclaration","scope":3211,"src":"10927:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3173,"name":"address","nodeType":"ElementaryTypeName","src":"10927:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3176,"mutability":"mutable","name":"message","nameLocation":"10966:7:10","nodeType":"VariableDeclaration","scope":3211,"src":"10951:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3175,"name":"bytes","nodeType":"ElementaryTypeName","src":"10951:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10835:144:10"},"returnParameters":{"id":3182,"nodeType":"ParameterList","parameters":[],"src":"11044:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3291,"nodeType":"FunctionDefinition","src":"11601:642:10","nodes":[],"body":{"id":3290,"nodeType":"Block","src":"11833:410:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3230,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"11847:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11864:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11856:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3231,"name":"address","nodeType":"ElementaryTypeName","src":"11856:7:10","typeDescriptions":{}}},"id":3234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11856:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11847:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3236,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"11870:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11888:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11880:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3237,"name":"address","nodeType":"ElementaryTypeName","src":"11880:7:10","typeDescriptions":{}}},"id":3240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11880:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11870:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11847:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3246,"nodeType":"IfStatement","src":"11843:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3243,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"11899:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11899:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3245,"nodeType":"RevertStatement","src":"11892:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3247,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"11926:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11936:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11926:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3253,"nodeType":"IfStatement","src":"11922:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3250,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"11946:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11946:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3252,"nodeType":"RevertStatement","src":"11939:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3254,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"11985:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3255,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"11995:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11985:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3257,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12022:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3260,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12040:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12032:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3258,"name":"address","nodeType":"ElementaryTypeName","src":"12032:7:10","typeDescriptions":{}}},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12032:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12022:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11985:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3267,"nodeType":"IfStatement","src":"11981:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3264,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"12054:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12054:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3266,"nodeType":"RevertStatement","src":"12047:22:10"}},{"condition":{"id":3275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12084:38:10","subExpression":{"arguments":[{"id":3272,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12107:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3273,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"12115:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3269,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"12092:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3268,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"12085:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12085:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12099:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"12085:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12085:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3279,"nodeType":"IfStatement","src":"12080:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3276,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"12131:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12131:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3278,"nodeType":"RevertStatement","src":"12124:27:10"}},{"expression":{"arguments":[{"id":3284,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3215,"src":"12204:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3285,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"12213:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3286,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"12220:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3287,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3223,"src":"12228:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3281,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12179:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3280,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"12161:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12161:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12187:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"12161:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12161:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3289,"nodeType":"ExpressionStatement","src":"12161:75:10"}]},"baseFunctions":[4542],"documentation":{"id":3212,"nodeType":"StructuredDocumentation","src":"11222:374:10","text":"@notice Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"c39aca37","implemented":true,"kind":"function","modifiers":[{"id":3226,"kind":"modifierInvocation","modifierName":{"id":3225,"name":"onlyFungible","nameLocations":["11794:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"11794:12:10"},"nodeType":"ModifierInvocation","src":"11794:12:10"},{"id":3228,"kind":"modifierInvocation","modifierName":{"id":3227,"name":"whenNotPaused","nameLocations":["11815:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11815:13:10"},"nodeType":"ModifierInvocation","src":"11815:13:10"}],"name":"depositAndCall","nameLocation":"11610:14:10","parameters":{"id":3224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3215,"mutability":"mutable","name":"context","nameLocation":"11652:7:10","nodeType":"VariableDeclaration","scope":3291,"src":"11634:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3214,"nodeType":"UserDefinedTypeName","pathNode":{"id":3213,"name":"zContext","nameLocations":["11634:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"11634:8:10"},"referencedDeclaration":4914,"src":"11634:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3217,"mutability":"mutable","name":"zrc20","nameLocation":"11677:5:10","nodeType":"VariableDeclaration","scope":3291,"src":"11669:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3216,"name":"address","nodeType":"ElementaryTypeName","src":"11669:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3219,"mutability":"mutable","name":"amount","nameLocation":"11700:6:10","nodeType":"VariableDeclaration","scope":3291,"src":"11692:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3218,"name":"uint256","nodeType":"ElementaryTypeName","src":"11692:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3221,"mutability":"mutable","name":"target","nameLocation":"11724:6:10","nodeType":"VariableDeclaration","scope":3291,"src":"11716:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3220,"name":"address","nodeType":"ElementaryTypeName","src":"11716:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3223,"mutability":"mutable","name":"message","nameLocation":"11755:7:10","nodeType":"VariableDeclaration","scope":3291,"src":"11740:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3222,"name":"bytes","nodeType":"ElementaryTypeName","src":"11740:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11624:144:10"},"returnParameters":{"id":3229,"nodeType":"ParameterList","parameters":[],"src":"11833:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3355,"nodeType":"FunctionDefinition","src":"12555:557:10","nodes":[],"body":{"id":3354,"nodeType":"Block","src":"12764:348:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3308,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12778:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12796:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3310,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12788:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3309,"name":"address","nodeType":"ElementaryTypeName","src":"12788:7:10","typeDescriptions":{}}},"id":3312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12788:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12778:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3317,"nodeType":"IfStatement","src":"12774:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3314,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"12807:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12807:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3316,"nodeType":"RevertStatement","src":"12800:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3318,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"12834:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12844:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12834:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3324,"nodeType":"IfStatement","src":"12830:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3321,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"12854:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12854:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3323,"nodeType":"RevertStatement","src":"12847:31:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3325,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12892:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3326,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"12902:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12892:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3328,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12929:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3331,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12947:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12939:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3329,"name":"address","nodeType":"ElementaryTypeName","src":"12939:7:10","typeDescriptions":{}}},"id":3332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12939:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12929:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12892:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3338,"nodeType":"IfStatement","src":"12888:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3335,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"12961:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12961:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3337,"nodeType":"RevertStatement","src":"12954:22:10"}},{"expression":{"arguments":[{"id":3340,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"13001:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3341,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"13009:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3339,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"12987:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":3342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12987:29:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3343,"nodeType":"ExpressionStatement","src":"12987:29:10"},{"expression":{"arguments":[{"id":3348,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"13069:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3349,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"13078:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3350,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"13089:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3351,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3301,"src":"13097:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3345,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"13044:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3344,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"13026:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13026:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13052:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"13026:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13026:79:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3353,"nodeType":"ExpressionStatement","src":"13026:79:10"}]},"baseFunctions":[4555],"documentation":{"id":3292,"nodeType":"StructuredDocumentation","src":"12249:301:10","text":"@notice Deposit ZETA and call a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"21501a95","implemented":true,"kind":"function","modifiers":[{"id":3304,"kind":"modifierInvocation","modifierName":{"id":3303,"name":"onlyFungible","nameLocations":["12725:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"12725:12:10"},"nodeType":"ModifierInvocation","src":"12725:12:10"},{"id":3306,"kind":"modifierInvocation","modifierName":{"id":3305,"name":"whenNotPaused","nameLocations":["12746:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"12746:13:10"},"nodeType":"ModifierInvocation","src":"12746:13:10"}],"name":"depositAndCall","nameLocation":"12564:14:10","parameters":{"id":3302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3295,"mutability":"mutable","name":"context","nameLocation":"12606:7:10","nodeType":"VariableDeclaration","scope":3355,"src":"12588:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3294,"nodeType":"UserDefinedTypeName","pathNode":{"id":3293,"name":"zContext","nameLocations":["12588:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"12588:8:10"},"referencedDeclaration":4914,"src":"12588:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3297,"mutability":"mutable","name":"amount","nameLocation":"12631:6:10","nodeType":"VariableDeclaration","scope":3355,"src":"12623:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3296,"name":"uint256","nodeType":"ElementaryTypeName","src":"12623:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3299,"mutability":"mutable","name":"target","nameLocation":"12655:6:10","nodeType":"VariableDeclaration","scope":3355,"src":"12647:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3298,"name":"address","nodeType":"ElementaryTypeName","src":"12647:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3301,"mutability":"mutable","name":"message","nameLocation":"12686:7:10","nodeType":"VariableDeclaration","scope":3355,"src":"12671:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3300,"name":"bytes","nodeType":"ElementaryTypeName","src":"12671:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12578:121:10"},"returnParameters":{"id":3307,"nodeType":"ParameterList","parameters":[],"src":"12764:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3386,"nodeType":"FunctionDefinition","src":"13292:236:10","nodes":[],"body":{"id":3385,"nodeType":"Block","src":"13405:123:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3368,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"13419:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13437:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13429:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3369,"name":"address","nodeType":"ElementaryTypeName","src":"13429:7:10","typeDescriptions":{}}},"id":3372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13429:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13419:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3377,"nodeType":"IfStatement","src":"13415:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3374,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"13448:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13448:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3376,"nodeType":"RevertStatement","src":"13441:20:10"}},{"expression":{"arguments":[{"id":3382,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3361,"src":"13507:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":3379,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"13490:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3378,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"13472:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13472:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13498:8:10","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"13472:34:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13472:49:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3384,"nodeType":"ExpressionStatement","src":"13472:49:10"}]},"baseFunctions":[4564],"documentation":{"id":3356,"nodeType":"StructuredDocumentation","src":"13118:169:10","text":"@notice Revert a user-specified contract on ZEVM.\n @param target The target contract to call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"717d335f","implemented":true,"kind":"function","modifiers":[{"id":3364,"kind":"modifierInvocation","modifierName":{"id":3363,"name":"onlyFungible","nameLocations":["13378:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"13378:12:10"},"nodeType":"ModifierInvocation","src":"13378:12:10"},{"id":3366,"kind":"modifierInvocation","modifierName":{"id":3365,"name":"whenNotPaused","nameLocations":["13391:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"13391:13:10"},"nodeType":"ModifierInvocation","src":"13391:13:10"}],"name":"executeRevert","nameLocation":"13301:13:10","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3358,"mutability":"mutable","name":"target","nameLocation":"13323:6:10","nodeType":"VariableDeclaration","scope":3386,"src":"13315:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3357,"name":"address","nodeType":"ElementaryTypeName","src":"13315:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3361,"mutability":"mutable","name":"revertContext","nameLocation":"13354:13:10","nodeType":"VariableDeclaration","scope":3386,"src":"13331:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":3360,"nodeType":"UserDefinedTypeName","pathNode":{"id":3359,"name":"RevertContext","nameLocations":["13331:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"13331:13:10"},"referencedDeclaration":21,"src":"13331:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"13314:54:10"},"returnParameters":{"id":3367,"nodeType":"ParameterList","parameters":[],"src":"13405:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3461,"nodeType":"FunctionDefinition","src":"13852:597:10","nodes":[],"body":{"id":3460,"nodeType":"Block","src":"14065:384:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3403,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"14079:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14096:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14088:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3404,"name":"address","nodeType":"ElementaryTypeName","src":"14088:7:10","typeDescriptions":{}}},"id":3407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14088:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14079:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3409,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14102:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14120:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14112:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3410,"name":"address","nodeType":"ElementaryTypeName","src":"14112:7:10","typeDescriptions":{}}},"id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14112:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14102:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14079:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3419,"nodeType":"IfStatement","src":"14075:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3416,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"14131:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14131:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3418,"nodeType":"RevertStatement","src":"14124:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3420,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"14158:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14168:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14158:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3426,"nodeType":"IfStatement","src":"14154:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3423,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"14178:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14178:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3425,"nodeType":"RevertStatement","src":"14171:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3427,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14217:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3428,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"14227:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14217:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3430,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14254:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3433,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14272:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14264:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3431,"name":"address","nodeType":"ElementaryTypeName","src":"14264:7:10","typeDescriptions":{}}},"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14264:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14254:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14217:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3440,"nodeType":"IfStatement","src":"14213:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3437,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"14286:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14286:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3439,"nodeType":"RevertStatement","src":"14279:22:10"}},{"condition":{"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14316:38:10","subExpression":{"arguments":[{"id":3445,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14339:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3446,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"14347:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3442,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"14324:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3441,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"14317:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14317:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14331:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"14317:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14317:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3452,"nodeType":"IfStatement","src":"14312:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3449,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"14363:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14363:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3451,"nodeType":"RevertStatement","src":"14356:27:10"}},{"expression":{"arguments":[{"id":3457,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3396,"src":"14428:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":3454,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14411:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3453,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"14393:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14419:8:10","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"14393:34:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:49:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3459,"nodeType":"ExpressionStatement","src":"14393:49:10"}]},"baseFunctions":[4577],"documentation":{"id":3387,"nodeType":"StructuredDocumentation","src":"13534:313:10","text":"@notice Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to revert.\n @param target The target contract to call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"0310eb76","implemented":true,"kind":"function","modifiers":[{"id":3399,"kind":"modifierInvocation","modifierName":{"id":3398,"name":"onlyFungible","nameLocations":["14026:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"14026:12:10"},"nodeType":"ModifierInvocation","src":"14026:12:10"},{"id":3401,"kind":"modifierInvocation","modifierName":{"id":3400,"name":"whenNotPaused","nameLocations":["14047:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"14047:13:10"},"nodeType":"ModifierInvocation","src":"14047:13:10"}],"name":"depositAndRevert","nameLocation":"13861:16:10","parameters":{"id":3397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3389,"mutability":"mutable","name":"zrc20","nameLocation":"13895:5:10","nodeType":"VariableDeclaration","scope":3461,"src":"13887:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3388,"name":"address","nodeType":"ElementaryTypeName","src":"13887:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3391,"mutability":"mutable","name":"amount","nameLocation":"13918:6:10","nodeType":"VariableDeclaration","scope":3461,"src":"13910:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3390,"name":"uint256","nodeType":"ElementaryTypeName","src":"13910:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3393,"mutability":"mutable","name":"target","nameLocation":"13942:6:10","nodeType":"VariableDeclaration","scope":3461,"src":"13934:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3392,"name":"address","nodeType":"ElementaryTypeName","src":"13934:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3396,"mutability":"mutable","name":"revertContext","nameLocation":"13981:13:10","nodeType":"VariableDeclaration","scope":3461,"src":"13958:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":3395,"nodeType":"UserDefinedTypeName","pathNode":{"id":3394,"name":"RevertContext","nameLocations":["13958:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"13958:13:10"},"referencedDeclaration":21,"src":"13958:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"13877:123:10"},"returnParameters":{"id":3402,"nodeType":"ParameterList","parameters":[],"src":"14065:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":2494,"name":"IGatewayZEVM","nameLocations":["986:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":4578,"src":"986:12:10"},"id":2495,"nodeType":"InheritanceSpecifier","src":"986:12:10"},{"baseName":{"id":2496,"name":"Initializable","nameLocations":["1004:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44489,"src":"1004:13:10"},"id":2497,"nodeType":"InheritanceSpecifier","src":"1004:13:10"},{"baseName":{"id":2498,"name":"AccessControlUpgradeable","nameLocations":["1023:24:10"],"nodeType":"IdentifierPath","referencedDeclaration":44235,"src":"1023:24:10"},"id":2499,"nodeType":"InheritanceSpecifier","src":"1023:24:10"},{"baseName":{"id":2500,"name":"UUPSUpgradeable","nameLocations":["1053:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":44671,"src":"1053:15:10"},"id":2501,"nodeType":"InheritanceSpecifier","src":"1053:15:10"},{"baseName":{"id":2502,"name":"ReentrancyGuardUpgradeable","nameLocations":["1074:26:10"],"nodeType":"IdentifierPath","referencedDeclaration":45022,"src":"1074:26:10"},"id":2503,"nodeType":"InheritanceSpecifier","src":"1074:26:10"},{"baseName":{"id":2504,"name":"PausableUpgradeable","nameLocations":["1106:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":44893,"src":"1106:19:10"},"id":2505,"nodeType":"InheritanceSpecifier","src":"1106:19:10"}],"canonicalName":"GatewayZEVM","contractDependencies":[],"contractKind":"contract","documentation":{"id":2493,"nodeType":"StructuredDocumentation","src":"758:200:10","text":"@title GatewayZEVM\n @notice The GatewayZEVM contract is the endpoint to call smart contracts on omnichain.\n @dev The contract doesn't hold any funds and should never have active allowances."},"fullyImplemented":true,"linearizedBaseContracts":[3462,44893,45022,44671,45620,44235,45062,48334,45441,44717,44489,4578,4386,4424],"name":"GatewayZEVM","nameLocation":"967:11:10","scope":3463,"usedErrors":[2508,4390,4393,4396,4399,4402,4405,4408,4411,4414,4417,4420,4423,44252,44255,44516,44521,44756,44759,44924,45368,45371,45830,45843,47477,47480],"usedEvents":[4361,4385,44260,44748,44753,45380,45389,45398,45809]}],"license":"MIT"},"id":10} \ No newline at end of file diff --git a/packages/tasks/src/evmCall.ts b/packages/tasks/src/evmCall.ts new file mode 100644 index 00000000..25c23cfa --- /dev/null +++ b/packages/tasks/src/evmCall.ts @@ -0,0 +1,78 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; + +export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayEvm, + GatewayABI.abi, + signer + ); + + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + try { + const tx = await gateway[ + "call(address,bytes,(address,bool,address,bytes,uint256))" + ]( + args.receiver, + encodedParameters, + { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }, + { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + } + ); + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("evm-call", "Call a universal app", evmCall) + .addParam("receiver", "Receiver address on ZetaChain") + .addOptionalParam( + "gatewayEvm", + "contract address of gateway on EVM", + "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ) + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/evmDeposit.ts b/packages/tasks/src/evmDeposit.ts new file mode 100644 index 00000000..4e092535 --- /dev/null +++ b/packages/tasks/src/evmDeposit.ts @@ -0,0 +1,100 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; + +export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayEvm, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + try { + let tx; + if (args.erc20) { + const erc20Contract = new hre.ethers.Contract( + args.erc20, + ERC20_ABI.abi, + signer + ); + const decimals = await erc20Contract.decimals(); + const value = utils.parseUnits(args.amount, decimals); + await erc20Contract.connect(signer).approve(args.gatewayEvm, value); + const method = + "deposit(address,uint256,address,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + value, + args.erc20, + revertOptions, + txOptions + ); + } else { + const value = utils.parseEther(args.amount); + const method = "deposit(address,(address,bool,address,bytes,uint256))"; + tx = await gateway[method](args.receiver, revertOptions, { + ...txOptions, + value, + }); + } + if (tx) { + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("evm-deposit", "Deposit tokens", evmDeposit) + .addParam("receiver", "Receiver address on ZetaChain") + .addOptionalParam( + "gatewayEvm", + "contract address of gateway on EVM", + "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ) + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000", + types.string + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 50000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam("amount", "amount of ETH to send with the transaction") + .addOptionalParam("erc20", "ERC-20 token address"); diff --git a/packages/tasks/src/evmDepositAndCall.ts b/packages/tasks/src/evmDepositAndCall.ts new file mode 100644 index 00000000..7e0ee502 --- /dev/null +++ b/packages/tasks/src/evmDepositAndCall.ts @@ -0,0 +1,117 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; + +export const evmDepositAndCall = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayEvm, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + try { + let tx; + if (args.erc20) { + const erc20Contract = new hre.ethers.Contract( + args.erc20, + ERC20_ABI.abi, + signer + ); + const decimals = await erc20Contract.decimals(); + const value = utils.parseUnits(args.amount, decimals); + await erc20Contract.connect(signer).approve(args.gatewayEvm, value); + const method = + "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + value, + args.erc20, + encodedParameters, + revertOptions, + txOptions + ); + } else { + const value = utils.parseEther(args.amount); + const method = + "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + encodedParameters, + revertOptions, + { + ...txOptions, + value, + } + ); + } + if (tx) { + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("evm-deposit-and-call", "Deposit tokens", evmDepositAndCall) + .addParam("receiver", "Receiver address on ZetaChain") + .addOptionalParam( + "gatewayEvm", + "contract address of gateway on EVM", + "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + ) + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000", + types.string + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 50000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam("amount", "amount of ETH to send with the transaction") + .addOptionalParam("erc20", "ERC-20 token address") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index 52641201..8d8e5c96 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -12,3 +12,8 @@ export { sendZETATask } from "./sendZETA"; // export { verifyTask } from "./verify"; export { tokensTask } from "./tokens"; export { withdrawTask } from "./withdraw"; +export { evmCall } from "./evmCall"; +export { evmDeposit } from "./evmDeposit"; +export { evmDepositAndCall } from "./evmDepositAndCall"; +export { zetachainCall } from "./zetachainCall"; +export { zetachainWithdraw } from "./zetachainWithdraw"; diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts new file mode 100644 index 00000000..e1ebdb53 --- /dev/null +++ b/packages/tasks/src/zetachainCall.ts @@ -0,0 +1,114 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "@zetachain/protocol-contracts/abi/zevm/ZRC20.sol/ZRC20.json"; + +export const zetachainCall = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + console.log("Signer address:", signer.address); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + const functionSignature = utils.id(args.function).slice(0, 10); + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + const message = utils.hexlify( + utils.concat([functionSignature, encodedParameters]) + ); + + try { + const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const approve = await zrc20.approve( + args.gatewayZetaChain, + utils.parseUnits(args.amount, 18), + txOptions + ); + await approve.wait(); + const tx = await gateway[ + "call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))" + ]( + utils.hexlify(args.receiver), + args.zrc20, + message, + args.callGasLimit, + revertOptions, + txOptions + ); + + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("zetachain-call", "Call a contract on a connected chain", zetachainCall) + .addOptionalParam( + "gatewayZetaChain", + "contract address of gateway on ZetaChain", + "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + ) + .addParam("zrc20", "The address of ZRC-20 to pay fees") + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "callGasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam( + "receiver", + "The address of the receiver contract on a connected chain" + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addParam("function", "Function to call (example: 'hello(string)')") + .addParam("types", "The types of the parameters (example: ['string'])") + .addParam("amount", "The amount of tokens to pay for gas") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts new file mode 100644 index 00000000..7c388b77 --- /dev/null +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -0,0 +1,116 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "@zetachain/protocol-contracts/abi/zevm/ZRC20.sol/ZRC20.json"; + +export const zetachainWithdraw = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + try { + const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const decimals = await zrc20.decimals(); + const value = utils.parseUnits(args.amount, decimals); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFee(); + if (args.zrc20 === gasZRC20) { + const approveGasAndWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value.add(gasFee), + txOptions + ); + await approveGasAndWithdraw.wait(); + } else { + const gasZRC20Contract = new hre.ethers.Contract( + gasZRC20, + ZRC20ABI.abi, + signer + ); + const approveGas = await gasZRC20Contract.approve( + args.gatewayZetaChain, + gasFee, + txOptions + ); + await approveGas.wait(); + const approveWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value, + txOptions + ); + await approveWithdraw.wait(); + } + const method = + "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))"; + const tx = await gateway[method]( + utils.hexlify(args.receiver), + value, + args.zrc20, + revertOptions, + txOptions + ); + + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task("zetachain-withdraw", "Withdraw tokens from ZetaChain", zetachainWithdraw) + .addOptionalParam( + "gatewayZetaChain", + "contract address of gateway on ZetaChain", + "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + ) + .addOptionalParam("zrc20", "The address of the ZRC20 token") + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam( + "receiver", + "The address of the receiver contract on a connected chain" + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addParam("amount", "The amount of tokens to send"); From 2699208979bfe52a4691e286862f5bd70f8d4952 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 13:04:09 +0900 Subject: [PATCH 02/18] withdraw and call --- packages/tasks/src/abi/ZRC20.sol/ZRC20.json | 1 + .../tasks/src/abi/ZRC20.sol/ZRC20Errors.json | 1 + packages/tasks/src/index.ts | 1 + packages/tasks/src/zetachainCall.ts | 4 +- packages/tasks/src/zetachainWithdraw.ts | 2 +- .../tasks/src/zetachainWithdrawAndCall.ts | 136 ++++++++++++++++++ 6 files changed, 142 insertions(+), 3 deletions(-) create mode 100644 packages/tasks/src/abi/ZRC20.sol/ZRC20.json create mode 100644 packages/tasks/src/abi/ZRC20.sol/ZRC20Errors.json create mode 100644 packages/tasks/src/zetachainWithdrawAndCall.ts diff --git a/packages/tasks/src/abi/ZRC20.sol/ZRC20.json b/packages/tasks/src/abi/ZRC20.sol/ZRC20.json new file mode 100644 index 00000000..50900b98 --- /dev/null +++ b/packages/tasks/src/abi/ZRC20.sol/ZRC20.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"decimals_","type":"uint8","internalType":"uint8"},{"name":"chainid_","type":"uint256","internalType":"uint256"},{"name":"coinType_","type":"uint8","internalType":"enum CoinType"},{"name":"gasLimit_","type":"uint256","internalType":"uint256"},{"name":"systemContractAddress_","type":"address","internalType":"address"},{"name":"gatewayAddress_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"CHAIN_ID","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"COIN_TYPE","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum CoinType"}],"stateMutability":"view"},{"type":"function","name":"FUNGIBLE_MODULE_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROTOCOL_FLAT_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"SYSTEM_CONTRACT_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"gatewayAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"setName","inputs":[{"name":"newName","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSymbol","inputs":[{"name":"newSymbol","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateGasLimit","inputs":[{"name":"gasLimit_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateGatewayAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateProtocolFlatFee","inputs":[{"name":"protocolFlatFee_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateSystemContractAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"to","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawGasFee","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdrawGasFeeWithGasLimit","inputs":[{"name":"gasLimit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"name":"from","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UpdatedGasLimit","inputs":[{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UpdatedGateway","inputs":[{"name":"gateway","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UpdatedProtocolFlatFee","inputs":[{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UpdatedSystemContract","inputs":[{"name":"systemContract","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InvalidSender","inputs":[]},{"type":"error","name":"LowAllowance","inputs":[]},{"type":"error","name":"LowBalance","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroGasCoin","inputs":[]},{"type":"error","name":"ZeroGasPrice","inputs":[]}],"bytecode":{"object":"0x60c060405234801561001057600080fd5b506040516120a63803806120a683398101604081905261002f91610224565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610376565b5060076100b78882610376565b506008805460ff191660ff881617905560808590528360028111156100de576100de610434565b60a08160028111156100f2576100f2610434565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b03199091161790555061044a9350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261016757600080fd5b81516001600160401b0381111561018057610180610140565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ae576101ae610140565b6040528181528382016020018510156101c657600080fd5b60005b828110156101e5576020818601810151838301820152016101c9565b506000918101602001919091529392505050565b80516003811061020857600080fd5b919050565b80516001600160a01b038116811461020857600080fd5b600080600080600080600080610100898b03121561024157600080fd5b88516001600160401b0381111561025757600080fd5b6102638b828c01610156565b60208b015190995090506001600160401b0381111561028157600080fd5b61028d8b828c01610156565b975050604089015160ff811681146102a457600080fd5b60608a015190965094506102ba60808a016101f9565b60a08a015190945092506102d060c08a0161020d565b91506102de60e08a0161020d565b90509295985092959890939650565b600181811c9082168061030157607f821691505b60208210810361032157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561037157806000526020600020601f840160051c8101602085101561034e5750805b601f840160051c820191505b8181101561036e576000815560010161035a565b50505b505050565b81516001600160401b0381111561038f5761038f610140565b6103a38161039d84546102ed565b84610327565b6020601f8211600181146103d757600083156103bf5750848201515b600019600385901b1c1916600184901b17845561036e565b600084815260208120601f198516915b8281101561040757878501518255602094850194600190920191016103e7565b50848210156104255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61048b60003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea26469706673582212206ca0b4ba92c818c2268a96a059d56787769a64b137c4c1fa704309dae852329a64736f6c634300081a0033","sourceMap":"704:11440:11:-:0;;;2380:728;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2651:10;905:42;2651:37;2647:77;;2697:27;;-1:-1:-1;;;2697:27:11;;;;;;;;;;;2647:77;-1:-1:-1;;;;;2738:36:11;;;;:69;;-1:-1:-1;;;;;;2778:29:11;;;2738:69;2734:95;;;2816:13;;-1:-1:-1;;;2816:13:11;;;;;;;;;;;2734:95;2839:5;:13;2847:5;2839;:13;:::i;:::-;-1:-1:-1;2862:7:11;:17;2872:7;2862;:17;:::i;:::-;-1:-1:-1;2889:9:11;:21;;-1:-1:-1;;2889:21:11;;;;;;;2920:19;;;;2961:9;2949:21;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2980:9:11;:21;;;;3011:23;:48;;-1:-1:-1;;;;;3011:48:11;;;-1:-1:-1;;;;;;3011:48:11;;;;;;3069:14;:32;;;;;;3011:48;3069:32;-1:-1:-1;;;;;;3069:32:11;;;;;;-1:-1:-1;704:11440:11;;-1:-1:-1;;;;704:11440:11;14:127:108;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:834;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;298:13;;-1:-1:-1;;;;;323:30:108;;320:56;;;356:18;;:::i;:::-;405:2;399:9;497:2;459:17;;-1:-1:-1;;455:31:108;;;488:2;451:40;447:54;435:67;;-1:-1:-1;;;;;517:34:108;;553:22;;;514:62;511:88;;;579:18;;:::i;:::-;615:2;608:22;639;;;680:19;;;701:4;676:30;673:39;-1:-1:-1;670:59:108;;;725:1;722;715:12;670:59;747:1;757:143;771:6;768:1;765:13;757:143;;;883:4;867:14;;;863:25;;857:32;834:14;;;830:25;;823:67;786:12;757:143;;;-1:-1:-1;948:1:108;920:19;;;941:4;916:30;909:41;;;;924:6;146:834;-1:-1:-1;;;146:834:108:o;985:153::-;1070:13;;1112:1;1102:12;;1092:40;;1128:1;1125;1118:12;1092:40;985:153;;;:::o;1143:177::-;1222:13;;-1:-1:-1;;;;;1264:31:108;;1254:42;;1244:70;;1310:1;1307;1300:12;1325:1212;1489:6;1497;1505;1513;1521;1529;1537;1545;1598:3;1586:9;1577:7;1573:23;1569:33;1566:53;;;1615:1;1612;1605:12;1566:53;1642:16;;-1:-1:-1;;;;;1670:30:108;;1667:50;;;1713:1;1710;1703:12;1667:50;1736:61;1789:7;1780:6;1769:9;1765:22;1736:61;:::i;:::-;1843:2;1828:18;;1822:25;1726:71;;-1:-1:-1;1822:25:108;-1:-1:-1;;;;;;1859:32:108;;1856:52;;;1904:1;1901;1894:12;1856:52;1927:63;1982:7;1971:8;1960:9;1956:24;1927:63;:::i;:::-;1917:73;;;2033:2;2022:9;2018:18;2012:25;2077:4;2070:5;2066:16;2059:5;2056:27;2046:55;;2097:1;2094;2087:12;2046:55;2191:2;2176:18;;2170:25;2120:5;;-1:-1:-1;2170:25:108;-1:-1:-1;2240:56:108;2291:3;2276:19;;2240:56;:::i;:::-;2362:3;2347:19;;2341:26;2230:66;;-1:-1:-1;2341:26:108;-1:-1:-1;2412:50:108;2457:3;2442:19;;2412:50;:::i;:::-;2402:60;;2481:50;2526:3;2515:9;2511:19;2481:50;:::i;:::-;2471:60;;1325:1212;;;;;;;;;;;:::o;2542:380::-;2621:1;2617:12;;;;2664;;;2685:61;;2739:4;2731:6;2727:17;2717:27;;2685:61;2792:2;2784:6;2781:14;2761:18;2758:38;2755:161;;2838:10;2833:3;2829:20;2826:1;2819:31;2873:4;2870:1;2863:15;2901:4;2898:1;2891:15;2755:161;;2542:380;;;:::o;3053:518::-;3155:2;3150:3;3147:11;3144:421;;;3191:5;3188:1;3181:16;3235:4;3232:1;3222:18;3305:2;3293:10;3289:19;3286:1;3282:27;3276:4;3272:38;3341:4;3329:10;3326:20;3323:47;;;-1:-1:-1;3364:4:108;3323:47;3419:2;3414:3;3410:12;3407:1;3403:20;3397:4;3393:31;3383:41;;3474:81;3492:2;3485:5;3482:13;3474:81;;;3551:1;3537:16;;3518:1;3507:13;3474:81;;;3478:3;;3144:421;3053:518;;;:::o;3747:1299::-;3867:10;;-1:-1:-1;;;;;3889:30:108;;3886:56;;;3922:18;;:::i;:::-;3951:97;4041:6;4001:38;4033:4;4027:11;4001:38;:::i;:::-;3995:4;3951:97;:::i;:::-;4097:4;4128:2;4117:14;;4145:1;4140:649;;;;4833:1;4850:6;4847:89;;;-1:-1:-1;4902:19:108;;;4896:26;4847:89;-1:-1:-1;;3704:1:108;3700:11;;;3696:24;3692:29;3682:40;3728:1;3724:11;;;3679:57;4949:81;;4110:930;;4140:649;3000:1;2993:14;;;3037:4;3024:18;;-1:-1:-1;;4176:20:108;;;4294:222;4308:7;4305:1;4302:14;4294:222;;;4390:19;;;4384:26;4369:42;;4497:4;4482:20;;;;4450:1;4438:14;;;;4324:12;4294:222;;;4298:3;4544:6;4535:7;4532:19;4529:201;;;4605:19;;;4599:26;-1:-1:-1;;4688:1:108;4684:14;;;4700:3;4680:24;4676:37;4672:42;4657:58;4642:74;;4529:201;-1:-1:-1;;;;4776:1:108;4760:14;;;4756:22;4743:36;;-1:-1:-1;3747:1299:108:o;5051:127::-;5112:10;5107:3;5103:20;5100:1;5093:31;5143:4;5140:1;5133:15;5167:4;5164:1;5157:15;5051:127;704:11440:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea26469706673582212206ca0b4ba92c818c2268a96a059d56787769a64b137c4c1fa704309dae852329a64736f6c634300081a0033","sourceMap":"704:11440:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1384:24;;;;;;;;;849:25:108;;;837:2;822:18;1384:24:11;703:177:108;5417:166:11;;;;;;:::i;:::-;;:::i;:::-;;;1581:14:108;;1574:22;1556:41;;1544:2;1529:18;5417:166:11;1416:187:108;4130:106:11;4217:12;;4130:106;;5831:388;;;;;;:::i;:::-;;:::i;3933:98::-;4015:9;;3933:98;;4015:9;;;;2263:36:108;;2251:2;2236:18;3933:98:11;2121:184:108;855:92:11;;905:42;855:92;;;;;2486:42:108;2474:55;;;2456:74;;2444:2;2429:18;855:92:11;2310:226:108;6365:126:11;;;;;;:::i;:::-;;:::i;8150:396::-;;;;;;:::i;:::-;;:::i;1528:41::-;;;;;;4418:125;;;;;;:::i;:::-;4518:18;;4492:7;4518:18;;;:9;:18;;;;;;;4418:125;982:33;;;;;1958:29;;;;;;;;;;;;3742:102;;;:::i;1073:35::-;;;;;;;;;;;;:::i;4741:172::-;;;;;;:::i;:::-;;:::i;3550:111::-;;;;;;:::i;:::-;;:::i;:::-;;3363:103;;;;;;:::i;:::-;;:::i;10352:430::-;;;;;;:::i;:::-;;:::i;10942:216::-;;;;;;:::i;:::-;;:::i;11320:193::-;;;;;;:::i;:::-;;:::i;8731:498::-;;;:::i;:::-;;;;5688:42:108;5676:55;;;5658:74;;5763:2;5748:18;;5741:34;;;;5631:18;8731:498:11;5484:297:108;5064:149:11;;;;;;:::i;:::-;5179:18;;;;5153:7;5179:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5064:149;11954:188;;;;;;:::i;:::-;;:::i;1234:38::-;;;;;;;;;11650:144;;;;;;:::i;:::-;;:::i;9437:525::-;;;;;;:::i;:::-;;:::i;3183:98::-;3237:13;3269:5;3262:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:98;:::o;5417:166::-;5500:4;5516:39;2073:10;5539:7;5548:6;5516:8;:39::i;:::-;-1:-1:-1;5572:4:11;5417:166;;;;;:::o;5831:388::-;5937:4;5953:36;5963:6;5971:9;5982:6;5953:9;:36::i;:::-;6027:19;;;6000:24;6027:19;;;:11;:19;;;;;;;;2073:10;6027:33;;;;;;;;6074:25;;;6070:52;;;6108:14;;;;;;;;;;;;;;6070:52;6133:57;6142:6;2073:10;6164:25;6183:6;6164:16;:25;:::i;:::-;6133:8;:57::i;:::-;-1:-1:-1;6208:4:11;;5831:388;-1:-1:-1;;;;5831:388:11:o;6365:126::-;6422:4;6438:25;6444:10;6456:6;6438:5;:25::i;:::-;-1:-1:-1;6480:4:11;;6365:126;-1:-1:-1;6365:126:11:o;8150:396::-;8222:4;8255:10;905:42;8255:37;;;;:78;;-1:-1:-1;8310:23:11;;;;8296:10;:37;;8255:78;:126;;;;-1:-1:-1;8367:14:11;;;;;;;8353:10;:28;;8255:126;8238:176;;;8399:15;;;;;;;;;;;;;;8238:176;8424:17;8430:2;8434:6;8424:5;:17::i;:::-;8464:41;;7088:15:108;8464:41:11;;;7072:101:108;8456:62:11;;;;;;7189:12:108;;8464:41:11;;;;;;;;;;;;;;8456:62;;8511:6;;8456:62;:::i;:::-;;;;;;;;-1:-1:-1;8535:4:11;8150:396;;;;:::o;3742:102::-;3798:13;3830:7;3823:14;;;;;:::i;4741:172::-;4827:4;4843:42;2073:10;4867:9;4878:6;4843:9;:42::i;3550:111::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;3635:7:::1;:19;3645:9:::0;3635:7;:19:::1;:::i;:::-;;3550:111:::0;:::o;3363:103::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;3444:5:::1;:15;3452:7:::0;3444:5;:15:::1;:::i;10352:430::-:0;10430:4;10447:16;10465:14;10483:16;:14;:16::i;:::-;10514:74;;;;;10544:10;10514:74;;;10011::108;905:42:11;10101:18:108;;;10094:83;10193:18;;;10186:34;;;10446:53:11;;-1:-1:-1;10446:53:11;-1:-1:-1;10514:29:11;;;;;;9984:18:108;;10514:74:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10509:135;;10611:22;;;;;;;;;;;;;;10509:135;10653:25;10659:10;10671:6;10653:5;:25::i;:::-;10736:17;;10693:61;;10704:10;;10693:61;;;;10716:2;;10720:6;;10728;;10693:61;:::i;:::-;;;;;;;;-1:-1:-1;10771:4:11;;10352:430;-1:-1:-1;;;;10352:430:11:o;10942:216::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;11029:18:::1;::::0;::::1;11025:44;;11056:13;;;;;;;;;;;;;;11025:44;11079:23;:30:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;11124:27:::1;::::0;2456:74:108;;;11124:27:11::1;::::0;2444:2:108;2429:18;11124:27:11::1;;;;;;;;10942:216:::0;:::o;11320:193::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;11400:18:::1;::::0;::::1;11396:44;;11427:13;;;;;;;;;;;;;;11396:44;11450:14;:21:::0;;;::::1;;;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;11486:20:::1;::::0;2456:74:108;;;11486:20:11::1;::::0;2444:2:108;2429:18;11486:20:11::1;2310:226:108::0;8731:498:11;8787:7;8842:23;;8834:64;;;;;8889:8;8834:64;;;849:25:108;8787:7:11;;;;8842:23;;;;;8834:54;;822:18:108;;8834:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8815:83;-1:-1:-1;8912:22:11;;;8908:48;;8943:13;;;;;;;;;;;;;;8908:48;8967:16;8994:23;;8986:60;;;;;9037:8;8986:60;;;849:25:108;8994:23:11;;;;;8986:50;;822:18:108;;8986:60:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8967:79;;9060:8;9072:1;9060:13;9056:65;;9096:14;;;;;;;;;;;;;;9056:65;9130:14;9170:17;;9158:9;;9147:8;:20;;;;:::i;:::-;:40;;;;:::i;:::-;9205:8;;9130:57;;-1:-1:-1;8731:498:11;;-1:-1:-1;;;8731:498:11:o;11954:188::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;12043:17:::1;:36:::0;;;12094:41:::1;::::0;849:25:108;;;12094:41:11::1;::::0;837:2:108;822:18;12094:41:11::1;703:177:108::0;11650:144:11;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;11725:9:::1;:21:::0;;;11761:26:::1;::::0;849:25:108;;;11761:26:11::1;::::0;837:2:108;822:18;11761:26:11::1;703:177:108::0;9437:525:11;9521:7;9576:23;;9568:64;;;;;9623:8;9568:64;;;849:25:108;9521:7:11;;;;9576:23;;;;;9568:54;;822:18:108;;9568:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9549:83;-1:-1:-1;9646:22:11;;;9642:48;;9677:13;;;;;;;;;;;;;;9642:48;9701:16;9728:23;;9720:60;;;;;9771:8;9720:60;;;849:25:108;9728:23:11;;;;;9720:50;;822:18:108;;9720:60:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9701:79;;9794:8;9806:1;9794:13;9790:65;;9830:14;;;;;;;;;;;;;;9790:65;9903:17;;9864:14;;9881:19;9892:8;9881;:19;:::i;:::-;:39;;;;:::i;:::-;9938:8;;9864:56;;-1:-1:-1;9437:525:11;;-1:-1:-1;;;;9437:525:11:o;7610:296::-;7707:19;;;7703:45;;7735:13;;;;;;;;;;;;;;7703:45;7762:21;;;7758:47;;7792:13;;;;;;;;;;;;;;7758:47;7816:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7867:32;;849:25:108;;;7867:32:11;;822:18:108;7867:32:11;;;;;;;;7610:296;;;:::o;6497:462::-;6598:20;;;6594:46;;6627:13;;;;;;;;;;;;;;6594:46;6654:23;;;6650:49;;6686:13;;;;;;;;;;;;;;6650:49;6734:17;;;6710:21;6734:17;;;:9;:17;;;;;;6765:22;;;6761:47;;;6796:12;;;;;;;;;;;;;;6761:47;6839:22;6855:6;6839:13;:22;:::i;:::-;6819:17;;;;;;;;:9;:17;;;;;;:42;;;;6871:20;;;;;;;;:30;;6895:6;;6819:17;6871:30;;6895:6;;6871:30;:::i;:::-;;;;;;;;6934:9;6917:35;;6926:6;6917:35;;;6945:6;6917:35;;;;849:25:108;;837:2;822:18;;703:177;6917:35:11;;;;;;;;6584:375;6497:462;;;:::o;7223:381::-;7302:21;;;7298:47;;7332:13;;;;;;;;;;;;;;7298:47;7381:18;;;7356:22;7381:18;;;:9;:18;;;;;;7413:23;;;7409:48;;;7445:12;;;;;;;;;;;;;;7409:48;7489:23;7506:6;7489:14;:23;:::i;:::-;7468:18;;;;;;;:9;:18;;;;;:44;;;;7522:12;:22;;7538:6;;7468:18;7522:22;;7538:6;;7522:22;:::i;:::-;;;;-1:-1:-1;;7560:37:11;;849:25:108;;;7586:1:11;;7560:37;;;;;;837:2:108;822:18;7560:37:11;703:177:108;6965:252:11;7044:21;;;7040:47;;7074:13;;;;;;;;;;;;;;7040:47;7114:6;7098:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;7130:18:11;;;;;;;:9;:18;;;;;:28;;7152:6;;7130:18;:28;;7152:6;;7130:28;:::i;:::-;;;;-1:-1:-1;;7173:37:11;;849:25:108;;;7173:37:11;;;;7190:1;;7173:37;;837:2:108;822:18;7173:37:11;;;;;;;6965:252;;:::o;14:459:108:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:139;170:6;167:1;164:13;156:139;;;278:4;263:13;;;259:24;;253:31;233:11;;;229:22;;222:63;185:12;156:139;;;160:3;340:1;333:4;324:6;319:3;315:16;311:27;304:38;462:4;392:66;387:2;379:6;375:15;371:88;366:3;362:98;358:109;351:116;;;14:459;;;;:::o;478:220::-;627:2;616:9;609:21;590:4;647:45;688:2;677:9;673:18;665:6;647:45;:::i;:::-;639:53;478:220;-1:-1:-1;;;478:220:108:o;885:154::-;971:42;964:5;960:54;953:5;950:65;940:93;;1029:1;1026;1019:12;940:93;885:154;:::o;1044:367::-;1112:6;1120;1173:2;1161:9;1152:7;1148:23;1144:32;1141:52;;;1189:1;1186;1179:12;1141:52;1228:9;1215:23;1247:31;1272:5;1247:31;:::i;:::-;1297:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1044:367:108:o;1608:508::-;1685:6;1693;1701;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;:::-;1878:5;-1:-1:-1;1935:2:108;1920:18;;1907:32;1948:33;1907:32;1948:33;:::i;:::-;1608:508;;2000:7;;-1:-1:-1;;;2080:2:108;2065:18;;;;2052:32;;1608:508::o;2541:226::-;2600:6;2653:2;2641:9;2632:7;2628:23;2624:32;2621:52;;;2669:1;2666;2659:12;2621:52;-1:-1:-1;2714:23:108;;2541:226;-1:-1:-1;2541:226:108:o;2772:247::-;2831:6;2884:2;2872:9;2863:7;2859:23;2855:32;2852:52;;;2900:1;2897;2890:12;2852:52;2939:9;2926:23;2958:31;2983:5;2958:31;:::i;3024:398::-;3169:2;3154:18;;3202:1;3191:13;;3181:201;;3238:77;3235:1;3228:88;3339:4;3336:1;3329:15;3367:4;3364:1;3357:15;3181:201;3391:25;;;3024:398;:::o;3427:184::-;3479:77;3476:1;3469:88;3576:4;3573:1;3566:15;3600:4;3597:1;3590:15;3616:834;3681:5;3713:1;3737:18;3729:6;3726:30;3723:56;;;3759:18;;:::i;:::-;-1:-1:-1;3973:2:108;3967:9;3823:66;3818:2;3806:15;;3802:88;;4031:2;4019:15;4015:88;4003:101;;4155:22;;;4134:18;4119:34;;4116:62;4113:88;;;4181:18;;:::i;:::-;4217:2;4210:22;4265;;;4250:6;-1:-1:-1;4250:6:108;4302:16;;;4299:25;-1:-1:-1;4296:45:108;;;4337:1;4334;4327:12;4296:45;4387:6;4382:3;4375:4;4367:6;4363:17;4350:44;4442:1;4435:4;4426:6;4418;4414:19;4410:30;4403:41;;3616:834;;;;;:::o;4455:451::-;4524:6;4577:2;4565:9;4556:7;4552:23;4548:32;4545:52;;;4593:1;4590;4583:12;4545:52;4633:9;4620:23;4666:18;4658:6;4655:30;4652:50;;;4698:1;4695;4688:12;4652:50;4721:22;;4774:4;4766:13;;4762:27;-1:-1:-1;4752:55:108;;4803:1;4800;4793:12;4752:55;4826:74;4892:7;4887:2;4874:16;4869:2;4865;4861:11;4826:74;:::i;:::-;4816:84;4455:451;-1:-1:-1;;;;4455:451:108:o;4911:568::-;4988:6;4996;5049:2;5037:9;5028:7;5024:23;5020:32;5017:52;;;5065:1;5062;5055:12;5017:52;5105:9;5092:23;5138:18;5130:6;5127:30;5124:50;;;5170:1;5167;5160:12;5124:50;5193:22;;5246:4;5238:13;;5234:27;-1:-1:-1;5224:55:108;;5275:1;5272;5265:12;5224:55;5298:76;5366:7;5361:2;5348:16;5341:4;5337:2;5333:13;5298:76;:::i;:::-;5288:86;5443:4;5428:20;;;;5415:34;;-1:-1:-1;;;;4911:568:108:o;5786:388::-;5854:6;5862;5915:2;5903:9;5894:7;5890:23;5886:32;5883:52;;;5931:1;5928;5921:12;5883:52;5970:9;5957:23;5989:31;6014:5;5989:31;:::i;:::-;6039:5;-1:-1:-1;6096:2:108;6081:18;;6068:32;6109:33;6068:32;6109:33;:::i;:::-;6161:7;6151:17;;;5786:388;;;;;:::o;6179:437::-;6258:1;6254:12;;;;6301;;;6322:61;;6376:4;6368:6;6364:17;6354:27;;6322:61;6429:2;6421:6;6418:14;6398:18;6395:38;6392:218;;6466:77;6463:1;6456:88;6567:4;6564:1;6557:15;6595:4;6592:1;6585:15;6392:218;;6179:437;;;:::o;6621:184::-;6673:77;6670:1;6663:88;6770:4;6767:1;6760:15;6794:4;6791:1;6784:15;6810:128;6877:9;;;6898:11;;;6895:37;;;6912:18;;:::i;7212:289::-;7387:2;7376:9;7369:21;7350:4;7407:45;7448:2;7437:9;7433:18;7425:6;7407:45;:::i;:::-;7399:53;;7488:6;7483:2;7472:9;7468:18;7461:34;7212:289;;;;;:::o;7632:518::-;7734:2;7729:3;7726:11;7723:421;;;7770:5;7767:1;7760:16;7814:4;7811:1;7801:18;7884:2;7872:10;7868:19;7865:1;7861:27;7855:4;7851:38;7920:4;7908:10;7905:20;7902:47;;;-1:-1:-1;7943:4:108;7902:47;7998:2;7993:3;7989:12;7986:1;7982:20;7976:4;7972:31;7962:41;;8053:81;8071:2;8064:5;8061:13;8053:81;;;8130:1;8116:16;;8097:1;8086:13;8053:81;;;8057:3;;7723:421;7632:518;;;:::o;8386:1418::-;8512:3;8506:10;8539:18;8531:6;8528:30;8525:56;;;8561:18;;:::i;:::-;8590:97;8680:6;8640:38;8672:4;8666:11;8640:38;:::i;:::-;8634:4;8590:97;:::i;:::-;8736:4;8767:2;8756:14;;8784:1;8779:768;;;;9591:1;9608:6;9605:89;;;-1:-1:-1;9660:19:108;;;9654:26;9605:89;8292:66;8283:1;8279:11;;;8275:84;8271:89;8261:100;8367:1;8363:11;;;8258:117;9707:81;;8749:1049;;8779:768;7579:1;7572:14;;;7616:4;7603:18;;8827:66;8815:79;;;8992:222;9006:7;9003:1;9000:14;8992:222;;;9088:19;;;9082:26;9067:42;;9195:4;9180:20;;;;9148:1;9136:14;;;;9022:12;8992:222;;;8996:3;9242:6;9233:7;9230:19;9227:261;;;9303:19;;;9297:26;9404:66;9386:1;9382:14;;;9398:3;9378:24;9374:97;9370:102;9355:118;9340:134;;9227:261;-1:-1:-1;;;;9534:1:108;9518:14;;;9514:22;9501:36;;-1:-1:-1;8386:1418:108:o;10231:277::-;10298:6;10351:2;10339:9;10330:7;10326:23;10322:32;10319:52;;;10367:1;10364;10357:12;10319:52;10399:9;10393:16;10452:5;10445:13;10438:21;10431:5;10428:32;10418:60;;10474:1;10471;10464:12;10513:433;10744:3;10733:9;10726:22;10707:4;10765:46;10806:3;10795:9;10791:19;10783:6;10765:46;:::i;:::-;10842:2;10827:18;;10820:34;;;;-1:-1:-1;10885:2:108;10870:18;;10863:34;;;;10928:2;10913:18;;;10906:34;10757:54;10513:433;-1:-1:-1;10513:433:108:o;10951:251::-;11021:6;11074:2;11062:9;11053:7;11049:23;11045:32;11042:52;;;11090:1;11087;11080:12;11042:52;11122:9;11116:16;11141:31;11166:5;11141:31;:::i;11207:184::-;11277:6;11330:2;11318:9;11309:7;11305:23;11301:32;11298:52;;;11346:1;11343;11336:12;11298:52;-1:-1:-1;11369:16:108;;11207:184;-1:-1:-1;11207:184:108:o;11396:168::-;11469:9;;;11500;;11517:15;;;11511:22;;11497:37;11487:71;;11538:18;;:::i;11569:125::-;11634:9;;;11655:10;;;11652:36;;;11668:18;;:::i","linkReferences":{},"immutableReferences":{"3497":[{"start":752,"length":32},{"start":3036,"length":32},{"start":3298,"length":32},{"start":3838,"length":32},{"start":4100,"length":32}],"3501":[{"start":836,"length":32}]}},"methodIdentifiers":{"CHAIN_ID()":"85e1f4d0","COIN_TYPE()":"a3413d03","FUNGIBLE_MODULE_ADDRESS()":"3ce4a5bc","GAS_LIMIT()":"091d2788","PROTOCOL_FLAT_FEE()":"4d8943bb","SYSTEM_CONTRACT_ADDRESS()":"f2441b32","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","decimals()":"313ce567","deposit(address,uint256)":"47e7ef24","gatewayAddress()":"8b851b95","name()":"06fdde03","setName(string)":"c47f0027","setSymbol(string)":"b84c8246","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","updateGasLimit(uint256)":"f687d12a","updateGatewayAddress(address)":"ccc77599","updateProtocolFlatFee(uint256)":"eddeb123","updateSystemContractAddress(address)":"c835d7cc","withdraw(bytes,uint256)":"c7012626","withdrawGasFee()":"d9eeebed","withdrawGasFeeWithGasLimit(uint256)":"fc5fecd5"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainid_\",\"type\":\"uint256\"},{\"internalType\":\"enum CoinType\",\"name\":\"coinType_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"systemContractAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gatewayAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasCoin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasPrice\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"from\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"gateway\",\"type\":\"address\"}],\"name\":\"UpdatedGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedProtocolFlatFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"systemContract\",\"type\":\"address\"}],\"name\":\"UpdatedSystemContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COIN_TYPE\",\"outputs\":[{\"internalType\":\"enum CoinType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROTOCOL_FLAT_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONTRACT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gatewayAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newSymbol\",\"type\":\"string\"}],\"name\":\"setSymbol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit_\",\"type\":\"uint256\"}],\"name\":\"updateGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"updateGatewayAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFlatFee_\",\"type\":\"uint256\"}],\"name\":\"updateProtocolFlatFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"updateSystemContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawGasFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawGasFeeWithGasLimit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns token allowance from owner to spender.\",\"params\":{\"owner\":\", owner address.\"},\"returns\":{\"_0\":\"uint256 allowance.\"}},\"approve(address,uint256)\":{\"details\":\"Approves amount transferFrom for spender.\",\"params\":{\"amount\":\", amount to approve.\",\"spender\":\", spender address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"balanceOf(address)\":{\"details\":\"Returns ZRC20 balance of an account.\",\"params\":{\"account\":\", account address for which balance is requested.\"},\"returns\":{\"_0\":\"uint256 account balance.\"}},\"burn(uint256)\":{\"details\":\"Burns an amount of tokens.\",\"params\":{\"amount\":\", amount to burn.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"constructor\":{\"details\":\"The only one allowed to deploy new ZRC20 is fungible address.\"},\"decimals()\":{\"details\":\"ZRC20 decimals.\",\"returns\":{\"_0\":\"returns uint8 decimals.\"}},\"deposit(address,uint256)\":{\"details\":\"Deposits corresponding tokens from external chain, only callable by Fungible module.\",\"params\":{\"amount\":\", amount to deposit.\",\"to\":\", recipient address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"name()\":{\"details\":\"ZRC20 name\",\"returns\":{\"_0\":\"name as string\"}},\"setName(string)\":{\"details\":\"Name can be updated by fungible module account.\"},\"setSymbol(string)\":{\"details\":\"Symbol can be updated by fungible module account.\"},\"symbol()\":{\"details\":\"ZRC20 symbol.\",\"returns\":{\"_0\":\"symbol as string.\"}},\"totalSupply()\":{\"details\":\"ZRC20 total supply.\",\"returns\":{\"_0\":\"returns uint256 total supply.\"}},\"transfer(address,uint256)\":{\"details\":\"Returns ZRC20 balance of an account.\",\"params\":{\"recipient\":\", recipiuent address to which transfer is done.\"},\"returns\":{\"_0\":\"true/false if transfer succeeded/failed.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers tokens from sender to recipient.\",\"params\":{\"amount\":\", amount to transfer.\",\"recipient\":\", recipient address.\",\"sender\":\", sender address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"updateGasLimit(uint256)\":{\"details\":\"Updates gas limit. Can only be updated by the fungible module.\",\"params\":{\"gasLimit_\":\", new gas limit.\"}},\"updateGatewayAddress(address)\":{\"details\":\"Updates gateway contract address. Can only be updated by the fungible module.\",\"params\":{\"addr\":\", new gateway contract address.\"}},\"updateProtocolFlatFee(uint256)\":{\"details\":\"Updates protocol flat fee. Can only be updated by the fungible module.\",\"params\":{\"protocolFlatFee_\":\", new protocol flat fee.\"}},\"updateSystemContractAddress(address)\":{\"details\":\"Updates system contract address. Can only be updated by the fungible module.\",\"params\":{\"addr\":\", new system contract address.\"}},\"withdraw(bytes,uint256)\":{\"details\":\"Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the outbound chain this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.\",\"params\":{\"amount\":\", amount to deposit.\",\"to\":\", recipient address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"withdrawGasFee()\":{\"details\":\"Withdraws gas fees.\",\"returns\":{\"_0\":\"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()\"}},\"withdrawGasFeeWithGasLimit(uint256)\":{\"details\":\"Withdraws gas fees with specified gasLimit\",\"returns\":{\"_0\":\"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()\"}}},\"stateVariables\":{\"GAS_LIMIT\":{\"details\":\"Name is in upper case to maintain compatibility with ZRC20.sol v1\"},\"PROTOCOL_FLAT_FEE\":{\"details\":\"Name is in upper case to maintain compatibility with ZRC20.sol v1\"},\"SYSTEM_CONTRACT_ADDRESS\":{\"details\":\"Name is in upper case to maintain compatibility with ZRC20.sol v1\"},\"gatewayAddress\":{\"details\":\"This variable is added at last position to maintain storage layout with ZRC20.sol v1\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"CHAIN_ID()\":{\"notice\":\"Chain id.abi\"},\"COIN_TYPE()\":{\"notice\":\"Coin type, checkout Interfaces.sol.\"},\"FUNGIBLE_MODULE_ADDRESS()\":{\"notice\":\"Fungible address is always the same, maintained at the protocol level\"},\"GAS_LIMIT()\":{\"notice\":\"Gas limit.\"},\"PROTOCOL_FLAT_FEE()\":{\"notice\":\"Protocol flat fee.\"},\"SYSTEM_CONTRACT_ADDRESS()\":{\"notice\":\"System contract address.\"},\"gatewayAddress()\":{\"notice\":\"Gateway contract address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/ZRC20.sol\":\"ZRC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/zevm/ZRC20.sol\":{\"keccak256\":\"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e\",\"dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi\"]},\"contracts/zevm/interfaces/ISystem.sol\":{\"keccak256\":\"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d\",\"dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"chainid_","type":"uint256"},{"internalType":"enum CoinType","name":"coinType_","type":"uint8"},{"internalType":"uint256","name":"gasLimit_","type":"uint256"},{"internalType":"address","name":"systemContractAddress_","type":"address"},{"internalType":"address","name":"gatewayAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InvalidSender"},{"inputs":[],"type":"error","name":"LowAllowance"},{"inputs":[],"type":"error","name":"LowBalance"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroGasCoin"},{"inputs":[],"type":"error","name":"ZeroGasPrice"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"bytes","name":"from","type":"bytes","indexed":false},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false}],"type":"event","name":"UpdatedGasLimit","anonymous":false},{"inputs":[{"internalType":"address","name":"gateway","type":"address","indexed":false}],"type":"event","name":"UpdatedGateway","anonymous":false},{"inputs":[{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false}],"type":"event","name":"UpdatedProtocolFlatFee","anonymous":false},{"inputs":[{"internalType":"address","name":"systemContract","type":"address","indexed":false}],"type":"event","name":"UpdatedSystemContract","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"bytes","name":"to","type":"bytes","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasFee","type":"uint256","indexed":false},{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"COIN_TYPE","outputs":[{"internalType":"enum CoinType","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FUNGIBLE_MODULE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"GAS_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROTOCOL_FLAT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deposit","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"gatewayAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"newName","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setName"},{"inputs":[{"internalType":"string","name":"newSymbol","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setSymbol"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"gasLimit_","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updateGasLimit"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"updateGatewayAddress"},{"inputs":[{"internalType":"uint256","name":"protocolFlatFee_","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updateProtocolFlatFee"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"updateSystemContractAddress"},{"inputs":[{"internalType":"bytes","name":"to","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"withdrawGasFee","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawGasFeeWithGasLimit","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns token allowance from owner to spender.","params":{"owner":", owner address."},"returns":{"_0":"uint256 allowance."}},"approve(address,uint256)":{"details":"Approves amount transferFrom for spender.","params":{"amount":", amount to approve.","spender":", spender address."},"returns":{"_0":"true/false if succeeded/failed."}},"balanceOf(address)":{"details":"Returns ZRC20 balance of an account.","params":{"account":", account address for which balance is requested."},"returns":{"_0":"uint256 account balance."}},"burn(uint256)":{"details":"Burns an amount of tokens.","params":{"amount":", amount to burn."},"returns":{"_0":"true/false if succeeded/failed."}},"constructor":{"details":"The only one allowed to deploy new ZRC20 is fungible address."},"decimals()":{"details":"ZRC20 decimals.","returns":{"_0":"returns uint8 decimals."}},"deposit(address,uint256)":{"details":"Deposits corresponding tokens from external chain, only callable by Fungible module.","params":{"amount":", amount to deposit.","to":", recipient address."},"returns":{"_0":"true/false if succeeded/failed."}},"name()":{"details":"ZRC20 name","returns":{"_0":"name as string"}},"setName(string)":{"details":"Name can be updated by fungible module account."},"setSymbol(string)":{"details":"Symbol can be updated by fungible module account."},"symbol()":{"details":"ZRC20 symbol.","returns":{"_0":"symbol as string."}},"totalSupply()":{"details":"ZRC20 total supply.","returns":{"_0":"returns uint256 total supply."}},"transfer(address,uint256)":{"details":"Returns ZRC20 balance of an account.","params":{"recipient":", recipiuent address to which transfer is done."},"returns":{"_0":"true/false if transfer succeeded/failed."}},"transferFrom(address,address,uint256)":{"details":"Transfers tokens from sender to recipient.","params":{"amount":", amount to transfer.","recipient":", recipient address.","sender":", sender address."},"returns":{"_0":"true/false if succeeded/failed."}},"updateGasLimit(uint256)":{"details":"Updates gas limit. Can only be updated by the fungible module.","params":{"gasLimit_":", new gas limit."}},"updateGatewayAddress(address)":{"details":"Updates gateway contract address. Can only be updated by the fungible module.","params":{"addr":", new gateway contract address."}},"updateProtocolFlatFee(uint256)":{"details":"Updates protocol flat fee. Can only be updated by the fungible module.","params":{"protocolFlatFee_":", new protocol flat fee."}},"updateSystemContractAddress(address)":{"details":"Updates system contract address. Can only be updated by the fungible module.","params":{"addr":", new system contract address."}},"withdraw(bytes,uint256)":{"details":"Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the outbound chain this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.","params":{"amount":", amount to deposit.","to":", recipient address."},"returns":{"_0":"true/false if succeeded/failed."}},"withdrawGasFee()":{"details":"Withdraws gas fees.","returns":{"_0":"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()"}},"withdrawGasFeeWithGasLimit(uint256)":{"details":"Withdraws gas fees with specified gasLimit","returns":{"_0":"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()"}}},"version":1},"userdoc":{"kind":"user","methods":{"CHAIN_ID()":{"notice":"Chain id.abi"},"COIN_TYPE()":{"notice":"Coin type, checkout Interfaces.sol."},"FUNGIBLE_MODULE_ADDRESS()":{"notice":"Fungible address is always the same, maintained at the protocol level"},"GAS_LIMIT()":{"notice":"Gas limit."},"PROTOCOL_FLAT_FEE()":{"notice":"Protocol flat fee."},"SYSTEM_CONTRACT_ADDRESS()":{"notice":"System contract address."},"gatewayAddress()":{"notice":"Gateway contract address."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/ZRC20.sol":"ZRC20"},"evmVersion":"london","libraries":{}},"sources":{"contracts/zevm/ZRC20.sol":{"keccak256":"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc","urls":["bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e","dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi"],"license":"MIT"},"contracts/zevm/interfaces/ISystem.sol":{"keccak256":"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df","urls":["bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d","dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":3504,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"SYSTEM_CONTRACT_ADDRESS","offset":0,"slot":"0","type":"t_address"},{"astId":3507,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"GAS_LIMIT","offset":0,"slot":"1","type":"t_uint256"},{"astId":3511,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"PROTOCOL_FLAT_FEE","offset":0,"slot":"2","type":"t_uint256"},{"astId":3515,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_balances","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3521,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_allowances","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":3523,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_totalSupply","offset":0,"slot":"5","type":"t_uint256"},{"astId":3525,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_name","offset":0,"slot":"6","type":"t_string_storage"},{"astId":3527,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_symbol","offset":0,"slot":"7","type":"t_string_storage"},{"astId":3529,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_decimals","offset":0,"slot":"8","type":"t_uint8"},{"astId":3532,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"gatewayAddress","offset":1,"slot":"8","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"ast":{"absolutePath":"contracts/zevm/ZRC20.sol","id":4341,"exportedSymbols":{"CoinType":[4903],"ISystem":[4618],"IZRC20":[4825],"IZRC20Metadata":[4844],"ZRC20":[4340],"ZRC20Errors":[3484],"ZRC20Events":[4898]},"nodeType":"SourceUnit","src":"32:12113:11","nodes":[{"id":3464,"nodeType":"PragmaDirective","src":"32:23:11","nodes":[],"literals":["solidity","0.8",".26"]},{"id":3465,"nodeType":"ImportDirective","src":"57:53:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/ISystem.sol","file":"../../contracts/zevm/interfaces/ISystem.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4619,"symbolAliases":[],"unitAlias":""},{"id":3466,"nodeType":"ImportDirective","src":"111:52:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"../../contracts/zevm/interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4904,"symbolAliases":[],"unitAlias":""},{"id":3484,"nodeType":"ContractDefinition","src":"205:316:11","nodes":[{"id":3469,"nodeType":"ErrorDefinition","src":"298:34:11","nodes":[],"errorSelector":"2b2add3d","name":"CallerIsNotFungibleModule","nameLocation":"304:25:11","parameters":{"id":3468,"nodeType":"ParameterList","parameters":[],"src":"329:2:11"}},{"id":3471,"nodeType":"ErrorDefinition","src":"337:22:11","nodes":[],"errorSelector":"ddb5de5e","name":"InvalidSender","nameLocation":"343:13:11","parameters":{"id":3470,"nodeType":"ParameterList","parameters":[],"src":"356:2:11"}},{"id":3473,"nodeType":"ErrorDefinition","src":"364:29:11","nodes":[],"errorSelector":"0a7cd6d6","name":"GasFeeTransferFailed","nameLocation":"370:20:11","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"390:2:11"}},{"id":3475,"nodeType":"ErrorDefinition","src":"398:20:11","nodes":[],"errorSelector":"78fff396","name":"ZeroGasCoin","nameLocation":"404:11:11","parameters":{"id":3474,"nodeType":"ParameterList","parameters":[],"src":"415:2:11"}},{"id":3477,"nodeType":"ErrorDefinition","src":"423:21:11","nodes":[],"errorSelector":"e661aed0","name":"ZeroGasPrice","nameLocation":"429:12:11","parameters":{"id":3476,"nodeType":"ParameterList","parameters":[],"src":"441:2:11"}},{"id":3479,"nodeType":"ErrorDefinition","src":"449:21:11","nodes":[],"errorSelector":"10bad147","name":"LowAllowance","nameLocation":"455:12:11","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"467:2:11"}},{"id":3481,"nodeType":"ErrorDefinition","src":"475:19:11","nodes":[],"errorSelector":"fe382aa7","name":"LowBalance","nameLocation":"481:10:11","parameters":{"id":3480,"nodeType":"ParameterList","parameters":[],"src":"491:2:11"}},{"id":3483,"nodeType":"ErrorDefinition","src":"499:20:11","nodes":[],"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"505:11:11","parameters":{"id":3482,"nodeType":"ParameterList","parameters":[],"src":"516:2:11"}}],"abstract":false,"baseContracts":[],"canonicalName":"ZRC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":3467,"nodeType":"StructuredDocumentation","src":"165:39:11","text":" @dev Custom errors for ZRC20"},"fullyImplemented":true,"linearizedBaseContracts":[3484],"name":"ZRC20Errors","nameLocation":"215:11:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[]},{"id":4340,"nodeType":"ContractDefinition","src":"704:11440:11","nodes":[{"id":3494,"nodeType":"VariableDeclaration","src":"855:92:11","nodes":[],"constant":true,"documentation":{"id":3491,"nodeType":"StructuredDocumentation","src":"769:81:11","text":"@notice Fungible address is always the same, maintained at the protocol level"},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"879:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3492,"name":"address","nodeType":"ElementaryTypeName","src":"855:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":3493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"905:42:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":3497,"nodeType":"VariableDeclaration","src":"982:33:11","nodes":[],"constant":false,"documentation":{"id":3495,"nodeType":"StructuredDocumentation","src":"953:24:11","text":"@notice Chain id.abi"},"functionSelector":"85e1f4d0","mutability":"immutable","name":"CHAIN_ID","nameLocation":"1007:8:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3496,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3501,"nodeType":"VariableDeclaration","src":"1073:35:11","nodes":[],"constant":false,"documentation":{"id":3498,"nodeType":"StructuredDocumentation","src":"1021:47:11","text":"@notice Coin type, checkout Interfaces.sol."},"functionSelector":"a3413d03","mutability":"immutable","name":"COIN_TYPE","nameLocation":"1099:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3500,"nodeType":"UserDefinedTypeName","pathNode":{"id":3499,"name":"CoinType","nameLocations":["1073:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"1073:8:11"},"referencedDeclaration":4903,"src":"1073:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"public"},{"id":3504,"nodeType":"VariableDeclaration","src":"1234:38:11","nodes":[],"constant":false,"documentation":{"id":3502,"nodeType":"StructuredDocumentation","src":"1114:115:11","text":"@notice System contract address.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"f2441b32","mutability":"mutable","name":"SYSTEM_CONTRACT_ADDRESS","nameLocation":"1249:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3503,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3507,"nodeType":"VariableDeclaration","src":"1384:24:11","nodes":[],"baseFunctions":[4814],"constant":false,"documentation":{"id":3505,"nodeType":"StructuredDocumentation","src":"1278:101:11","text":"@notice Gas limit.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"091d2788","mutability":"mutable","name":"GAS_LIMIT","nameLocation":"1399:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3506,"name":"uint256","nodeType":"ElementaryTypeName","src":"1384:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3511,"nodeType":"VariableDeclaration","src":"1528:41:11","nodes":[],"baseFunctions":[4808],"constant":false,"documentation":{"id":3508,"nodeType":"StructuredDocumentation","src":"1414:109:11","text":"@notice Protocol flat fee.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"4d8943bb","mutability":"mutable","name":"PROTOCOL_FLAT_FEE","nameLocation":"1552:17:11","overrides":{"id":3510,"nodeType":"OverrideSpecifier","overrides":[],"src":"1543:8:11"},"scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3515,"nodeType":"VariableDeclaration","src":"1576:45:11","nodes":[],"constant":false,"mutability":"mutable","name":"_balances","nameLocation":"1612:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3514,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3512,"name":"address","nodeType":"ElementaryTypeName","src":"1584:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1576:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3513,"name":"uint256","nodeType":"ElementaryTypeName","src":"1595:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"id":3521,"nodeType":"VariableDeclaration","src":"1627:67:11","nodes":[],"constant":false,"mutability":"mutable","name":"_allowances","nameLocation":"1683:11:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3520,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3516,"name":"address","nodeType":"ElementaryTypeName","src":"1635:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1627:47:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3519,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3517,"name":"address","nodeType":"ElementaryTypeName","src":"1654:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1646:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"id":3523,"nodeType":"VariableDeclaration","src":"1700:28:11","nodes":[],"constant":false,"mutability":"mutable","name":"_totalSupply","nameLocation":"1716:12:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3522,"name":"uint256","nodeType":"ElementaryTypeName","src":"1700:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":3525,"nodeType":"VariableDeclaration","src":"1734:20:11","nodes":[],"constant":false,"mutability":"mutable","name":"_name","nameLocation":"1749:5:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3524,"name":"string","nodeType":"ElementaryTypeName","src":"1734:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3527,"nodeType":"VariableDeclaration","src":"1760:22:11","nodes":[],"constant":false,"mutability":"mutable","name":"_symbol","nameLocation":"1775:7:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3526,"name":"string","nodeType":"ElementaryTypeName","src":"1760:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3529,"nodeType":"VariableDeclaration","src":"1788:23:11","nodes":[],"constant":false,"mutability":"mutable","name":"_decimals","nameLocation":"1802:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3528,"name":"uint8","nodeType":"ElementaryTypeName","src":"1788:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"id":3532,"nodeType":"VariableDeclaration","src":"1958:29:11","nodes":[],"constant":false,"documentation":{"id":3530,"nodeType":"StructuredDocumentation","src":"1818:135:11","text":"@notice Gateway contract address.\n @dev This variable is added at last position to maintain storage layout with ZRC20.sol v1"},"functionSelector":"8b851b95","mutability":"mutable","name":"gatewayAddress","nameLocation":"1973:14:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3531,"name":"address","nodeType":"ElementaryTypeName","src":"1958:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3541,"nodeType":"FunctionDefinition","src":"1994:96:11","nodes":[],"body":{"id":3540,"nodeType":"Block","src":"2056:34:11","nodes":[],"statements":[{"expression":{"expression":{"id":3537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2073:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2077:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2073:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3536,"id":3539,"nodeType":"Return","src":"2066:17:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"2003:10:11","parameters":{"id":3533,"nodeType":"ParameterList","parameters":[],"src":"2013:2:11"},"returnParameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3541,"src":"2047:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3534,"name":"address","nodeType":"ElementaryTypeName","src":"2047:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2046:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":3554,"nodeType":"ModifierDefinition","src":"2155:129:11","nodes":[],"body":{"id":3553,"nodeType":"Block","src":"2179:105:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3544,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2193:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2197:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2193:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3546,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2207:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2193:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3551,"nodeType":"IfStatement","src":"2189:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3548,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2239:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2239:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3550,"nodeType":"RevertStatement","src":"2232:34:11"}},{"id":3552,"nodeType":"PlaceholderStatement","src":"2276:1:11"}]},"documentation":{"id":3542,"nodeType":"StructuredDocumentation","src":"2096:54:11","text":" @dev Only fungible module modifier."},"name":"onlyFungible","nameLocation":"2164:12:11","parameters":{"id":3543,"nodeType":"ParameterList","parameters":[],"src":"2176:2:11"},"virtual":false,"visibility":"internal"},{"id":3633,"nodeType":"FunctionDefinition","src":"2380:728:11","nodes":[],"body":{"id":3632,"nodeType":"Block","src":"2637:471:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3575,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2651:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2655:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2651:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3577,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2665:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2651:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3582,"nodeType":"IfStatement","src":"2647:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3579,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2697:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2697:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3581,"nodeType":"RevertStatement","src":"2690:34:11"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3583,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"2738:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2772:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2764:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3584,"name":"address","nodeType":"ElementaryTypeName","src":"2764:7:11","typeDescriptions":{}}},"id":3587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2764:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2738:36:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3589,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"2778:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2805:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2797:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3590,"name":"address","nodeType":"ElementaryTypeName","src":"2797:7:11","typeDescriptions":{}}},"id":3593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2797:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2778:29:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2738:69:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3599,"nodeType":"IfStatement","src":"2734:95:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3596,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"2816:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2816:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3598,"nodeType":"RevertStatement","src":"2809:20:11"}},{"expression":{"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3600,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"2839:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3601,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2847:5:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2839:13:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3603,"nodeType":"ExpressionStatement","src":"2839:13:11"},{"expression":{"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3604,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"2862:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3605,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3559,"src":"2872:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2862:17:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3607,"nodeType":"ExpressionStatement","src":"2862:17:11"},{"expression":{"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3608,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"2889:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3609,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3561,"src":"2901:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2889:21:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":3611,"nodeType":"ExpressionStatement","src":"2889:21:11"},{"expression":{"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3612,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"2920:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3613,"name":"chainid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"2931:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2920:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3615,"nodeType":"ExpressionStatement","src":"2920:19:11"},{"expression":{"id":3618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3616,"name":"COIN_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"2949:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3617,"name":"coinType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3566,"src":"2961:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"src":"2949:21:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"id":3619,"nodeType":"ExpressionStatement","src":"2949:21:11"},{"expression":{"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3620,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"2980:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3621,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"2992:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2980:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3623,"nodeType":"ExpressionStatement","src":"2980:21:11"},{"expression":{"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3624,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"3011:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3625,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"3037:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3011:48:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3627,"nodeType":"ExpressionStatement","src":"3011:48:11"},{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3628,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"3069:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3629,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"3086:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3069:32:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3631,"nodeType":"ExpressionStatement","src":"3069:32:11"}]},"documentation":{"id":3555,"nodeType":"StructuredDocumentation","src":"2290:85:11","text":" @dev The only one allowed to deploy new ZRC20 is fungible address."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3557,"mutability":"mutable","name":"name_","nameLocation":"2415:5:11","nodeType":"VariableDeclaration","scope":3633,"src":"2401:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3556,"name":"string","nodeType":"ElementaryTypeName","src":"2401:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3559,"mutability":"mutable","name":"symbol_","nameLocation":"2444:7:11","nodeType":"VariableDeclaration","scope":3633,"src":"2430:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3558,"name":"string","nodeType":"ElementaryTypeName","src":"2430:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3561,"mutability":"mutable","name":"decimals_","nameLocation":"2467:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2461:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3560,"name":"uint8","nodeType":"ElementaryTypeName","src":"2461:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3563,"mutability":"mutable","name":"chainid_","nameLocation":"2494:8:11","nodeType":"VariableDeclaration","scope":3633,"src":"2486:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"2486:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3566,"mutability":"mutable","name":"coinType_","nameLocation":"2521:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2512:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3565,"nodeType":"UserDefinedTypeName","pathNode":{"id":3564,"name":"CoinType","nameLocations":["2512:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"2512:8:11"},"referencedDeclaration":4903,"src":"2512:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"internal"},{"constant":false,"id":3568,"mutability":"mutable","name":"gasLimit_","nameLocation":"2548:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2540:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3567,"name":"uint256","nodeType":"ElementaryTypeName","src":"2540:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3570,"mutability":"mutable","name":"systemContractAddress_","nameLocation":"2575:22:11","nodeType":"VariableDeclaration","scope":3633,"src":"2567:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3569,"name":"address","nodeType":"ElementaryTypeName","src":"2567:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3572,"mutability":"mutable","name":"gatewayAddress_","nameLocation":"2615:15:11","nodeType":"VariableDeclaration","scope":3633,"src":"2607:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3571,"name":"address","nodeType":"ElementaryTypeName","src":"2607:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2391:245:11"},"returnParameters":{"id":3574,"nodeType":"ParameterList","parameters":[],"src":"2637:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":3643,"nodeType":"FunctionDefinition","src":"3183:98:11","nodes":[],"body":{"id":3642,"nodeType":"Block","src":"3252:29:11","nodes":[],"statements":[{"expression":{"id":3640,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3269:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3639,"id":3641,"nodeType":"Return","src":"3262:12:11"}]},"baseFunctions":[4833],"documentation":{"id":3634,"nodeType":"StructuredDocumentation","src":"3114:64:11","text":" @dev ZRC20 name\n @return name as string"},"functionSelector":"06fdde03","implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"3192:4:11","overrides":{"id":3636,"nodeType":"OverrideSpecifier","overrides":[],"src":"3219:8:11"},"parameters":{"id":3635,"nodeType":"ParameterList","parameters":[],"src":"3196:2:11"},"returnParameters":{"id":3639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3643,"src":"3237:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3637,"name":"string","nodeType":"ElementaryTypeName","src":"3237:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3236:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3657,"nodeType":"FunctionDefinition","src":"3363:103:11","nodes":[],"body":{"id":3656,"nodeType":"Block","src":"3434:32:11","nodes":[],"statements":[{"expression":{"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3652,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3444:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3653,"name":"newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"3452:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3444:15:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3655,"nodeType":"ExpressionStatement","src":"3444:15:11"}]},"baseFunctions":[4819],"documentation":{"id":3644,"nodeType":"StructuredDocumentation","src":"3287:71:11","text":" @dev Name can be updated by fungible module account."},"functionSelector":"c47f0027","implemented":true,"kind":"function","modifiers":[{"id":3650,"kind":"modifierInvocation","modifierName":{"id":3649,"name":"onlyFungible","nameLocations":["3421:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3421:12:11"},"nodeType":"ModifierInvocation","src":"3421:12:11"}],"name":"setName","nameLocation":"3372:7:11","overrides":{"id":3648,"nodeType":"OverrideSpecifier","overrides":[],"src":"3412:8:11"},"parameters":{"id":3647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3646,"mutability":"mutable","name":"newName","nameLocation":"3394:7:11","nodeType":"VariableDeclaration","scope":3657,"src":"3380:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3645,"name":"string","nodeType":"ElementaryTypeName","src":"3380:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3379:23:11"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"3434:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3671,"nodeType":"FunctionDefinition","src":"3550:111:11","nodes":[],"body":{"id":3670,"nodeType":"Block","src":"3625:36:11","nodes":[],"statements":[{"expression":{"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3666,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3635:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3667,"name":"newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3660,"src":"3645:9:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3635:19:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3669,"nodeType":"ExpressionStatement","src":"3635:19:11"}]},"baseFunctions":[4824],"documentation":{"id":3658,"nodeType":"StructuredDocumentation","src":"3472:73:11","text":" @dev Symbol can be updated by fungible module account."},"functionSelector":"b84c8246","implemented":true,"kind":"function","modifiers":[{"id":3664,"kind":"modifierInvocation","modifierName":{"id":3663,"name":"onlyFungible","nameLocations":["3612:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3612:12:11"},"nodeType":"ModifierInvocation","src":"3612:12:11"}],"name":"setSymbol","nameLocation":"3559:9:11","overrides":{"id":3662,"nodeType":"OverrideSpecifier","overrides":[],"src":"3603:8:11"},"parameters":{"id":3661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3660,"mutability":"mutable","name":"newSymbol","nameLocation":"3583:9:11","nodeType":"VariableDeclaration","scope":3671,"src":"3569:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3659,"name":"string","nodeType":"ElementaryTypeName","src":"3569:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3568:25:11"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"3625:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3681,"nodeType":"FunctionDefinition","src":"3742:102:11","nodes":[],"body":{"id":3680,"nodeType":"Block","src":"3813:31:11","nodes":[],"statements":[{"expression":{"id":3678,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3830:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3677,"id":3679,"nodeType":"Return","src":"3823:14:11"}]},"baseFunctions":[4838],"documentation":{"id":3672,"nodeType":"StructuredDocumentation","src":"3667:70:11","text":" @dev ZRC20 symbol.\n @return symbol as string."},"functionSelector":"95d89b41","implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"3751:6:11","overrides":{"id":3674,"nodeType":"OverrideSpecifier","overrides":[],"src":"3780:8:11"},"parameters":{"id":3673,"nodeType":"ParameterList","parameters":[],"src":"3757:2:11"},"returnParameters":{"id":3677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3681,"src":"3798:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3675,"name":"string","nodeType":"ElementaryTypeName","src":"3798:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3797:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3691,"nodeType":"FunctionDefinition","src":"3933:98:11","nodes":[],"body":{"id":3690,"nodeType":"Block","src":"3998:33:11","nodes":[],"statements":[{"expression":{"id":3688,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"4015:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":3687,"id":3689,"nodeType":"Return","src":"4008:16:11"}]},"baseFunctions":[4843],"documentation":{"id":3682,"nodeType":"StructuredDocumentation","src":"3850:78:11","text":" @dev ZRC20 decimals.\n @return returns uint8 decimals."},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3942:8:11","overrides":{"id":3684,"nodeType":"OverrideSpecifier","overrides":[],"src":"3973:8:11"},"parameters":{"id":3683,"nodeType":"ParameterList","parameters":[],"src":"3950:2:11"},"returnParameters":{"id":3687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3691,"src":"3991:5:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3685,"name":"uint8","nodeType":"ElementaryTypeName","src":"3991:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3990:7:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3701,"nodeType":"FunctionDefinition","src":"4130:106:11","nodes":[],"body":{"id":3700,"nodeType":"Block","src":"4200:36:11","nodes":[],"statements":[{"expression":{"id":3698,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"4217:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3697,"id":3699,"nodeType":"Return","src":"4210:19:11"}]},"baseFunctions":[4716],"documentation":{"id":3692,"nodeType":"StructuredDocumentation","src":"4037:88:11","text":" @dev ZRC20 total supply.\n @return returns uint256 total supply."},"functionSelector":"18160ddd","implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"4139:11:11","overrides":{"id":3694,"nodeType":"OverrideSpecifier","overrides":[],"src":"4173:8:11"},"parameters":{"id":3693,"nodeType":"ParameterList","parameters":[],"src":"4150:2:11"},"returnParameters":{"id":3697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3701,"src":"4191:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3695,"name":"uint256","nodeType":"ElementaryTypeName","src":"4191:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4190:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3715,"nodeType":"FunctionDefinition","src":"4418:125:11","nodes":[],"body":{"id":3714,"nodeType":"Block","src":"4501:42:11","nodes":[],"statements":[{"expression":{"baseExpression":{"id":3710,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"4518:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3712,"indexExpression":{"id":3711,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3704,"src":"4528:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4518:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3709,"id":3713,"nodeType":"Return","src":"4511:25:11"}]},"baseFunctions":[4723],"documentation":{"id":3702,"nodeType":"StructuredDocumentation","src":"4242:171:11","text":" @dev Returns ZRC20 balance of an account.\n @param account, account address for which balance is requested.\n @return uint256 account balance."},"functionSelector":"70a08231","implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"4427:9:11","overrides":{"id":3706,"nodeType":"OverrideSpecifier","overrides":[],"src":"4474:8:11"},"parameters":{"id":3705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"account","nameLocation":"4445:7:11","nodeType":"VariableDeclaration","scope":3715,"src":"4437:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3703,"name":"address","nodeType":"ElementaryTypeName","src":"4437:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4436:17:11"},"returnParameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3715,"src":"4492:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3707,"name":"uint256","nodeType":"ElementaryTypeName","src":"4492:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4491:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3736,"nodeType":"FunctionDefinition","src":"4741:172:11","nodes":[],"body":{"id":3735,"nodeType":"Block","src":"4833:80:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3727,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"4853:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4853:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3729,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"4867:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3730,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3720,"src":"4878:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3726,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"4843:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4843:42:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3732,"nodeType":"ExpressionStatement","src":"4843:42:11"},{"expression":{"hexValue":"74727565","id":3733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4902:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3725,"id":3734,"nodeType":"Return","src":"4895:11:11"}]},"baseFunctions":[4732],"documentation":{"id":3716,"nodeType":"StructuredDocumentation","src":"4549:187:11","text":" @dev Returns ZRC20 balance of an account.\n @param recipient, recipiuent address to which transfer is done.\n @return true/false if transfer succeeded/failed."},"functionSelector":"a9059cbb","implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4750:8:11","overrides":{"id":3722,"nodeType":"OverrideSpecifier","overrides":[],"src":"4809:8:11"},"parameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3718,"mutability":"mutable","name":"recipient","nameLocation":"4767:9:11","nodeType":"VariableDeclaration","scope":3736,"src":"4759:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3717,"name":"address","nodeType":"ElementaryTypeName","src":"4759:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3720,"mutability":"mutable","name":"amount","nameLocation":"4786:6:11","nodeType":"VariableDeclaration","scope":3736,"src":"4778:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4778:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4758:35:11"},"returnParameters":{"id":3725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3736,"src":"4827:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3723,"name":"bool","nodeType":"ElementaryTypeName","src":"4827:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4826:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3754,"nodeType":"FunctionDefinition","src":"5064:149:11","nodes":[],"body":{"id":3753,"nodeType":"Block","src":"5162:51:11","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":3747,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"5179:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3749,"indexExpression":{"id":3748,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3739,"src":"5191:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3751,"indexExpression":{"id":3750,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"5198:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3746,"id":3752,"nodeType":"Return","src":"5172:34:11"}]},"baseFunctions":[4741],"documentation":{"id":3737,"nodeType":"StructuredDocumentation","src":"4919:140:11","text":" @dev Returns token allowance from owner to spender.\n @param owner, owner address.\n @return uint256 allowance."},"functionSelector":"dd62ed3e","implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"5073:9:11","overrides":{"id":3743,"nodeType":"OverrideSpecifier","overrides":[],"src":"5135:8:11"},"parameters":{"id":3742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3739,"mutability":"mutable","name":"owner","nameLocation":"5091:5:11","nodeType":"VariableDeclaration","scope":3754,"src":"5083:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3738,"name":"address","nodeType":"ElementaryTypeName","src":"5083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"spender","nameLocation":"5106:7:11","nodeType":"VariableDeclaration","scope":3754,"src":"5098:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3740,"name":"address","nodeType":"ElementaryTypeName","src":"5098:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5082:32:11"},"returnParameters":{"id":3746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3754,"src":"5153:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3744,"name":"uint256","nodeType":"ElementaryTypeName","src":"5153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5152:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3775,"nodeType":"FunctionDefinition","src":"5417:166:11","nodes":[],"body":{"id":3774,"nodeType":"Block","src":"5506:77:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3766,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"5525:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5525:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3768,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3757,"src":"5539:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3759,"src":"5548:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3765,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"5516:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:39:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3771,"nodeType":"ExpressionStatement","src":"5516:39:11"},{"expression":{"hexValue":"74727565","id":3772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5572:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3764,"id":3773,"nodeType":"Return","src":"5565:11:11"}]},"baseFunctions":[4750],"documentation":{"id":3755,"nodeType":"StructuredDocumentation","src":"5219:193:11","text":" @dev Approves amount transferFrom for spender.\n @param spender, spender address.\n @param amount, amount to approve.\n @return true/false if succeeded/failed."},"functionSelector":"095ea7b3","implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"5426:7:11","overrides":{"id":3761,"nodeType":"OverrideSpecifier","overrides":[],"src":"5482:8:11"},"parameters":{"id":3760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"spender","nameLocation":"5442:7:11","nodeType":"VariableDeclaration","scope":3775,"src":"5434:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3756,"name":"address","nodeType":"ElementaryTypeName","src":"5434:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3759,"mutability":"mutable","name":"amount","nameLocation":"5459:6:11","nodeType":"VariableDeclaration","scope":3775,"src":"5451:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3758,"name":"uint256","nodeType":"ElementaryTypeName","src":"5451:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5433:33:11"},"returnParameters":{"id":3764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3775,"src":"5500:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3762,"name":"bool","nodeType":"ElementaryTypeName","src":"5500:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5499:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3822,"nodeType":"FunctionDefinition","src":"5831:388:11","nodes":[],"body":{"id":3821,"nodeType":"Block","src":"5943:276:11","nodes":[],"statements":[{"expression":{"arguments":[{"id":3789,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"5963:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3790,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3780,"src":"5971:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3791,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"5982:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3788,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"5953:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5953:36:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3793,"nodeType":"ExpressionStatement","src":"5953:36:11"},{"assignments":[3795],"declarations":[{"constant":false,"id":3795,"mutability":"mutable","name":"currentAllowance","nameLocation":"6008:16:11","nodeType":"VariableDeclaration","scope":3821,"src":"6000:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3794,"name":"uint256","nodeType":"ElementaryTypeName","src":"6000:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3802,"initialValue":{"baseExpression":{"baseExpression":{"id":3796,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"6027:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3798,"indexExpression":{"id":3797,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6039:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:19:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3801,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3799,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6047:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6047:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:33:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6000:60:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3803,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6074:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3804,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6093:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6074:25:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3809,"nodeType":"IfStatement","src":"6070:52:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3806,"name":"LowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3479,"src":"6108:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6108:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3808,"nodeType":"RevertStatement","src":"6101:21:11"}},{"expression":{"arguments":[{"id":3811,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6142:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":3812,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6150:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6150:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3814,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6164:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6183:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6164:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3810,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"6133:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6133:57:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3818,"nodeType":"ExpressionStatement","src":"6133:57:11"},{"expression":{"hexValue":"74727565","id":3819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6208:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3787,"id":3820,"nodeType":"Return","src":"6201:11:11"}]},"baseFunctions":[4761],"documentation":{"id":3776,"nodeType":"StructuredDocumentation","src":"5589:237:11","text":" @dev Transfers tokens from sender to recipient.\n @param sender, sender address.\n @param recipient, recipient address.\n @param amount, amount to transfer.\n @return true/false if succeeded/failed."},"functionSelector":"23b872dd","implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5840:12:11","overrides":{"id":3784,"nodeType":"OverrideSpecifier","overrides":[],"src":"5919:8:11"},"parameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3778,"mutability":"mutable","name":"sender","nameLocation":"5861:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3777,"name":"address","nodeType":"ElementaryTypeName","src":"5853:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3780,"mutability":"mutable","name":"recipient","nameLocation":"5877:9:11","nodeType":"VariableDeclaration","scope":3822,"src":"5869:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"amount","nameLocation":"5896:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5888:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5888:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5852:51:11"},"returnParameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3822,"src":"5937:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3785,"name":"bool","nodeType":"ElementaryTypeName","src":"5937:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5936:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3840,"nodeType":"FunctionDefinition","src":"6365:126:11","nodes":[],"body":{"id":3839,"nodeType":"Block","src":"6428:63:11","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":3832,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6444:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6448:6:11","memberName":"sender","nodeType":"MemberAccess","src":"6444:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3834,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3825,"src":"6456:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3831,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"6438:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6438:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3836,"nodeType":"ExpressionStatement","src":"6438:25:11"},{"expression":{"hexValue":"74727565","id":3837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6480:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3830,"id":3838,"nodeType":"Return","src":"6473:11:11"}]},"baseFunctions":[4777],"documentation":{"id":3823,"nodeType":"StructuredDocumentation","src":"6225:135:11","text":" @dev Burns an amount of tokens.\n @param amount, amount to burn.\n @return true/false if succeeded/failed."},"functionSelector":"42966c68","implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"6374:4:11","overrides":{"id":3827,"nodeType":"OverrideSpecifier","overrides":[],"src":"6404:8:11"},"parameters":{"id":3826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3825,"mutability":"mutable","name":"amount","nameLocation":"6387:6:11","nodeType":"VariableDeclaration","scope":3840,"src":"6379:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3824,"name":"uint256","nodeType":"ElementaryTypeName","src":"6379:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6378:16:11"},"returnParameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3840,"src":"6422:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3828,"name":"bool","nodeType":"ElementaryTypeName","src":"6422:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6421:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3903,"nodeType":"FunctionDefinition","src":"6497:462:11","nodes":[],"body":{"id":3902,"nodeType":"Block","src":"6584:375:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3849,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6598:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6616:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6608:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3850,"name":"address","nodeType":"ElementaryTypeName","src":"6608:7:11","typeDescriptions":{}}},"id":3853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6608:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6598:20:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3858,"nodeType":"IfStatement","src":"6594:46:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3855,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6627:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6627:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3857,"nodeType":"RevertStatement","src":"6620:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3859,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6654:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6675:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6667:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3860,"name":"address","nodeType":"ElementaryTypeName","src":"6667:7:11","typeDescriptions":{}}},"id":3863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6667:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6654:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3868,"nodeType":"IfStatement","src":"6650:49:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3865,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6686:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6686:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3867,"nodeType":"RevertStatement","src":"6679:20:11"}},{"assignments":[3870],"declarations":[{"constant":false,"id":3870,"mutability":"mutable","name":"senderBalance","nameLocation":"6718:13:11","nodeType":"VariableDeclaration","scope":3902,"src":"6710:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3869,"name":"uint256","nodeType":"ElementaryTypeName","src":"6710:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3874,"initialValue":{"baseExpression":{"id":3871,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6734:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3873,"indexExpression":{"id":3872,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6744:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6734:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6710:41:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3875,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6765:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3876,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6781:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6765:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3881,"nodeType":"IfStatement","src":"6761:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3878,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"6796:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3880,"nodeType":"RevertStatement","src":"6789:19:11"}},{"expression":{"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3882,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6819:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3884,"indexExpression":{"id":3883,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6829:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6819:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3885,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6839:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6855:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6839:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6819:42:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3889,"nodeType":"ExpressionStatement","src":"6819:42:11"},{"expression":{"id":3894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3890,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6871:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3892,"indexExpression":{"id":3891,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6881:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6871:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3893,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6895:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6871:30:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3895,"nodeType":"ExpressionStatement","src":"6871:30:11"},{"eventCall":{"arguments":[{"id":3897,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6926:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3898,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6934:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3899,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6945:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3896,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"6917:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6917:35:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3901,"nodeType":"EmitStatement","src":"6912:40:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6506:9:11","parameters":{"id":3847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"sender","nameLocation":"6524:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6516:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3841,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3844,"mutability":"mutable","name":"recipient","nameLocation":"6540:9:11","nodeType":"VariableDeclaration","scope":3903,"src":"6532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3843,"name":"address","nodeType":"ElementaryTypeName","src":"6532:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3846,"mutability":"mutable","name":"amount","nameLocation":"6559:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6551:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3845,"name":"uint256","nodeType":"ElementaryTypeName","src":"6551:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6515:51:11"},"returnParameters":{"id":3848,"nodeType":"ParameterList","parameters":[],"src":"6584:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3940,"nodeType":"FunctionDefinition","src":"6965:252:11","nodes":[],"body":{"id":3939,"nodeType":"Block","src":"7030:187:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3910,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7044:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7063:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7055:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3911,"name":"address","nodeType":"ElementaryTypeName","src":"7055:7:11","typeDescriptions":{}}},"id":3914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7055:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7044:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3919,"nodeType":"IfStatement","src":"7040:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3916,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7074:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7074:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3918,"nodeType":"RevertStatement","src":"7067:20:11"}},{"expression":{"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3920,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7098:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3921,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7114:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7098:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3923,"nodeType":"ExpressionStatement","src":"7098:22:11"},{"expression":{"id":3928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3924,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7130:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3926,"indexExpression":{"id":3925,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7140:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7130:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3927,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7152:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7130:28:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3929,"nodeType":"ExpressionStatement","src":"7130:28:11"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":3933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7190:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7182:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"7182:7:11","typeDescriptions":{}}},"id":3934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7182:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3935,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7194:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3936,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7203:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3930,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7173:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7173:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3938,"nodeType":"EmitStatement","src":"7168:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"6974:5:11","parameters":{"id":3908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3905,"mutability":"mutable","name":"account","nameLocation":"6988:7:11","nodeType":"VariableDeclaration","scope":3940,"src":"6980:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3904,"name":"address","nodeType":"ElementaryTypeName","src":"6980:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3907,"mutability":"mutable","name":"amount","nameLocation":"7005:6:11","nodeType":"VariableDeclaration","scope":3940,"src":"6997:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3906,"name":"uint256","nodeType":"ElementaryTypeName","src":"6997:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6979:33:11"},"returnParameters":{"id":3909,"nodeType":"ParameterList","parameters":[],"src":"7030:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3992,"nodeType":"FunctionDefinition","src":"7223:381:11","nodes":[],"body":{"id":3991,"nodeType":"Block","src":"7288:316:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3947,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7302:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7321:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7313:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3948,"name":"address","nodeType":"ElementaryTypeName","src":"7313:7:11","typeDescriptions":{}}},"id":3951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7313:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7302:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3956,"nodeType":"IfStatement","src":"7298:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3953,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7332:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3955,"nodeType":"RevertStatement","src":"7325:20:11"}},{"assignments":[3958],"declarations":[{"constant":false,"id":3958,"mutability":"mutable","name":"accountBalance","nameLocation":"7364:14:11","nodeType":"VariableDeclaration","scope":3991,"src":"7356:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3957,"name":"uint256","nodeType":"ElementaryTypeName","src":"7356:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3962,"initialValue":{"baseExpression":{"id":3959,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7381:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3961,"indexExpression":{"id":3960,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7391:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7381:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7356:43:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3963,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7413:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3964,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7430:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7413:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3969,"nodeType":"IfStatement","src":"7409:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3966,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"7445:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7445:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3968,"nodeType":"RevertStatement","src":"7438:19:11"}},{"expression":{"id":3976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3970,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7468:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3972,"indexExpression":{"id":3971,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7478:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7468:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3973,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7489:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3974,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7506:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7489:23:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7468:44:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3977,"nodeType":"ExpressionStatement","src":"7468:44:11"},{"expression":{"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3978,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7522:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3979,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7538:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3981,"nodeType":"ExpressionStatement","src":"7522:22:11"},{"eventCall":{"arguments":[{"id":3983,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7569:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":3986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7586:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7578:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3984,"name":"address","nodeType":"ElementaryTypeName","src":"7578:7:11","typeDescriptions":{}}},"id":3987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7578:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3988,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7590:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3982,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7560:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7560:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3990,"nodeType":"EmitStatement","src":"7555:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7232:5:11","parameters":{"id":3945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3942,"mutability":"mutable","name":"account","nameLocation":"7246:7:11","nodeType":"VariableDeclaration","scope":3992,"src":"7238:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3941,"name":"address","nodeType":"ElementaryTypeName","src":"7238:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3944,"mutability":"mutable","name":"amount","nameLocation":"7263:6:11","nodeType":"VariableDeclaration","scope":3992,"src":"7255:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3943,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7237:33:11"},"returnParameters":{"id":3946,"nodeType":"ParameterList","parameters":[],"src":"7288:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4036,"nodeType":"FunctionDefinition","src":"7610:296:11","nodes":[],"body":{"id":4035,"nodeType":"Block","src":"7693:213:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4001,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7707:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7724:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7716:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4002,"name":"address","nodeType":"ElementaryTypeName","src":"7716:7:11","typeDescriptions":{}}},"id":4005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7707:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4010,"nodeType":"IfStatement","src":"7703:45:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4007,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7735:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7735:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4009,"nodeType":"RevertStatement","src":"7728:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4011,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7762:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7781:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7773:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4012,"name":"address","nodeType":"ElementaryTypeName","src":"7773:7:11","typeDescriptions":{}}},"id":4015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7773:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7762:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4020,"nodeType":"IfStatement","src":"7758:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4017,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7792:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7792:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4019,"nodeType":"RevertStatement","src":"7785:20:11"}},{"expression":{"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4021,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"7816:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":4024,"indexExpression":{"id":4022,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7828:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7816:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4025,"indexExpression":{"id":4023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7835:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7816:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4026,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7846:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7816:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4028,"nodeType":"ExpressionStatement","src":"7816:36:11"},{"eventCall":{"arguments":[{"id":4030,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7876:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4031,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7883:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7892:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4029,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4861,"src":"7867:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":4033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7867:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4034,"nodeType":"EmitStatement","src":"7862:37:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7619:8:11","parameters":{"id":3999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3994,"mutability":"mutable","name":"owner","nameLocation":"7636:5:11","nodeType":"VariableDeclaration","scope":4036,"src":"7628:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3993,"name":"address","nodeType":"ElementaryTypeName","src":"7628:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"spender","nameLocation":"7651:7:11","nodeType":"VariableDeclaration","scope":4036,"src":"7643:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3995,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3998,"mutability":"mutable","name":"amount","nameLocation":"7668:6:11","nodeType":"VariableDeclaration","scope":4036,"src":"7660:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3997,"name":"uint256","nodeType":"ElementaryTypeName","src":"7660:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7627:48:11"},"returnParameters":{"id":4000,"nodeType":"ParameterList","parameters":[],"src":"7693:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4082,"nodeType":"FunctionDefinition","src":"8150:396:11","nodes":[],"body":{"id":4081,"nodeType":"Block","src":"8228:318:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4047,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8255:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8259:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8255:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4049,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8269:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8255:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4051,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8296:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8300:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8296:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4053,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8310:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8296:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:78:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8353:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8357:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8353:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4058,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"8367:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8353:28:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:126:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4064,"nodeType":"IfStatement","src":"8238:176:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4061,"name":"InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3471,"src":"8399:13:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8399:15:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4063,"nodeType":"RevertStatement","src":"8392:22:11"}},{"expression":{"arguments":[{"id":4066,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8430:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4067,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8434:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4065,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"8424:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:17:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4069,"nodeType":"ExpressionStatement","src":"8424:17:11"},{"eventCall":{"arguments":[{"arguments":[{"id":4073,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8481:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4071,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8464:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8468:12:11","memberName":"encodePacked","nodeType":"MemberAccess","src":"8464:16:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8464:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4075,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8507:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8511:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4070,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"8456:7:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes memory,address,uint256)"}},"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8456:62:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4078,"nodeType":"EmitStatement","src":"8451:67:11"},{"expression":{"hexValue":"74727565","id":4079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8535:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4046,"id":4080,"nodeType":"Return","src":"8528:11:11"}]},"baseFunctions":[4770],"documentation":{"id":4037,"nodeType":"StructuredDocumentation","src":"7912:233:11","text":" @dev Deposits corresponding tokens from external chain, only callable by Fungible module.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"47e7ef24","implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"8159:7:11","overrides":{"id":4043,"nodeType":"OverrideSpecifier","overrides":[],"src":"8204:8:11"},"parameters":{"id":4042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4039,"mutability":"mutable","name":"to","nameLocation":"8175:2:11","nodeType":"VariableDeclaration","scope":4082,"src":"8167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4038,"name":"address","nodeType":"ElementaryTypeName","src":"8167:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4041,"mutability":"mutable","name":"amount","nameLocation":"8187:6:11","nodeType":"VariableDeclaration","scope":4082,"src":"8179:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4040,"name":"uint256","nodeType":"ElementaryTypeName","src":"8179:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8166:28:11"},"returnParameters":{"id":4046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4082,"src":"8222:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4044,"name":"bool","nodeType":"ElementaryTypeName","src":"8222:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8221:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4140,"nodeType":"FunctionDefinition","src":"8731:498:11","nodes":[],"body":{"id":4139,"nodeType":"Block","src":"8805:424:11","nodes":[],"statements":[{"assignments":[4092],"declarations":[{"constant":false,"id":4092,"mutability":"mutable","name":"gasZRC20","nameLocation":"8823:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8815:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"8815:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4099,"initialValue":{"arguments":[{"id":4097,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"8889:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4094,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8842:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4093,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8834:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8867:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"8834:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8815:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4100,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"8912:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8924:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4101,"name":"address","nodeType":"ElementaryTypeName","src":"8924:7:11","typeDescriptions":{}}},"id":4104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8924:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8912:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4109,"nodeType":"IfStatement","src":"8908:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4106,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"8943:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8943:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4108,"nodeType":"RevertStatement","src":"8936:20:11"}},{"assignments":[4111],"declarations":[{"constant":false,"id":4111,"mutability":"mutable","name":"gasPrice","nameLocation":"8975:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8967:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4110,"name":"uint256","nodeType":"ElementaryTypeName","src":"8967:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4118,"initialValue":{"arguments":[{"id":4116,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9037:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4113,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8994:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4112,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8986:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9019:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"8986:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8967:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9060:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9072:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9060:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4126,"nodeType":"IfStatement","src":"9056:65:11","trueBody":{"id":4125,"nodeType":"Block","src":"9075:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4122,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9096:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9096:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4124,"nodeType":"RevertStatement","src":"9089:21:11"}]}},{"assignments":[4128],"declarations":[{"constant":false,"id":4128,"mutability":"mutable","name":"gasFee","nameLocation":"9138:6:11","nodeType":"VariableDeclaration","scope":4139,"src":"9130:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4127,"name":"uint256","nodeType":"ElementaryTypeName","src":"9130:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4134,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4129,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9147:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4130,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"9158:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4132,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9170:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:40:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9130:57:11"},{"expression":{"components":[{"id":4135,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"9205:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4136,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"9215:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4137,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9204:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4090,"id":4138,"nodeType":"Return","src":"9197:25:11"}]},"baseFunctions":[4793],"documentation":{"id":4083,"nodeType":"StructuredDocumentation","src":"8552:174:11","text":" @dev Withdraws gas fees.\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"d9eeebed","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFee","nameLocation":"8740:14:11","overrides":{"id":4085,"nodeType":"OverrideSpecifier","overrides":[],"src":"8769:8:11"},"parameters":{"id":4084,"nodeType":"ParameterList","parameters":[],"src":"8754:2:11"},"returnParameters":{"id":4090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8787:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4086,"name":"address","nodeType":"ElementaryTypeName","src":"8787:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8796:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8796:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8786:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4200,"nodeType":"FunctionDefinition","src":"9437:525:11","nodes":[],"body":{"id":4199,"nodeType":"Block","src":"9539:423:11","nodes":[],"statements":[{"assignments":[4152],"declarations":[{"constant":false,"id":4152,"mutability":"mutable","name":"gasZRC20","nameLocation":"9557:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9549:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4151,"name":"address","nodeType":"ElementaryTypeName","src":"9549:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4159,"initialValue":{"arguments":[{"id":4157,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9623:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4154,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9576:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4153,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9568:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9601:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"9568:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9549:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4160,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9646:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9666:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9658:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4161,"name":"address","nodeType":"ElementaryTypeName","src":"9658:7:11","typeDescriptions":{}}},"id":4164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9658:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9646:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4169,"nodeType":"IfStatement","src":"9642:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4166,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"9677:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4168,"nodeType":"RevertStatement","src":"9670:20:11"}},{"assignments":[4171],"declarations":[{"constant":false,"id":4171,"mutability":"mutable","name":"gasPrice","nameLocation":"9709:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9701:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"9701:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4178,"initialValue":{"arguments":[{"id":4176,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9771:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4173,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9728:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4172,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9720:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9753:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"9720:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9701:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4179,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9794:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9806:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9794:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4186,"nodeType":"IfStatement","src":"9790:65:11","trueBody":{"id":4185,"nodeType":"Block","src":"9809:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4182,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9830:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9830:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4184,"nodeType":"RevertStatement","src":"9823:21:11"}]}},{"assignments":[4188],"declarations":[{"constant":false,"id":4188,"mutability":"mutable","name":"gasFee","nameLocation":"9872:6:11","nodeType":"VariableDeclaration","scope":4199,"src":"9864:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4187,"name":"uint256","nodeType":"ElementaryTypeName","src":"9864:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4194,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4189,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9881:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4190,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4143,"src":"9892:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4192,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9903:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:39:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9864:56:11"},{"expression":{"components":[{"id":4195,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9938:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4196,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"9948:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9937:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4150,"id":4198,"nodeType":"Return","src":"9930:25:11"}]},"baseFunctions":[4802],"documentation":{"id":4141,"nodeType":"StructuredDocumentation","src":"9235:197:11","text":" @dev Withdraws gas fees with specified gasLimit\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"fc5fecd5","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFeeWithGasLimit","nameLocation":"9446:26:11","overrides":{"id":4145,"nodeType":"OverrideSpecifier","overrides":[],"src":"9503:8:11"},"parameters":{"id":4144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"mutability":"mutable","name":"gasLimit","nameLocation":"9481:8:11","nodeType":"VariableDeclaration","scope":4200,"src":"9473:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4142,"name":"uint256","nodeType":"ElementaryTypeName","src":"9473:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9472:18:11"},"returnParameters":{"id":4150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9521:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4146,"name":"address","nodeType":"ElementaryTypeName","src":"9521:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9530:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4148,"name":"uint256","nodeType":"ElementaryTypeName","src":"9530:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9520:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4251,"nodeType":"FunctionDefinition","src":"10352:430:11","nodes":[],"body":{"id":4250,"nodeType":"Block","src":"10436:346:11","nodes":[],"statements":[{"assignments":[4212,4214],"declarations":[{"constant":false,"id":4212,"mutability":"mutable","name":"gasZRC20","nameLocation":"10455:8:11","nodeType":"VariableDeclaration","scope":4250,"src":"10447:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4211,"name":"address","nodeType":"ElementaryTypeName","src":"10447:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4214,"mutability":"mutable","name":"gasFee","nameLocation":"10473:6:11","nodeType":"VariableDeclaration","scope":4250,"src":"10465:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4213,"name":"uint256","nodeType":"ElementaryTypeName","src":"10465:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":4215,"name":"withdrawGasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4140,"src":"10483:14:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint256_$","typeString":"function () view returns (address,uint256)"}},"id":4216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10483:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10446:53:11"},{"condition":{"id":4227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10513:75:11","subExpression":{"arguments":[{"expression":{"id":4222,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10544:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10548:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10544:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4224,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"10556:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4225,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10581:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4219,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4212,"src":"10521:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4218,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10514:6:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":4221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10531:12:11","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"10514:29:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":4226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:74:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4232,"nodeType":"IfStatement","src":"10509:135:11","trueBody":{"id":4231,"nodeType":"Block","src":"10590:54:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4228,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3473,"src":"10611:20:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10611:22:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4230,"nodeType":"RevertStatement","src":"10604:29:11"}]}},{"expression":{"arguments":[{"expression":{"id":4234,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10659:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10663:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10659:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4236,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10671:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4233,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"10653:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10653:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4238,"nodeType":"ExpressionStatement","src":"10653:25:11"},{"eventCall":{"arguments":[{"expression":{"id":4240,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10704:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10708:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10704:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4242,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"10716:2:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4243,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10720:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4244,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10728:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4245,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"10736:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4239,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"10693:10:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,bytes memory,uint256,uint256,uint256)"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:61:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4247,"nodeType":"EmitStatement","src":"10688:66:11"},{"expression":{"hexValue":"74727565","id":4248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10771:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4210,"id":4249,"nodeType":"Return","src":"10764:11:11"}]},"baseFunctions":[4786],"documentation":{"id":4201,"nodeType":"StructuredDocumentation","src":"9968:379:11","text":" @dev Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the\n outbound chain\n this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"c7012626","implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"10361:8:11","overrides":{"id":4207,"nodeType":"OverrideSpecifier","overrides":[],"src":"10412:8:11"},"parameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4203,"mutability":"mutable","name":"to","nameLocation":"10383:2:11","nodeType":"VariableDeclaration","scope":4251,"src":"10370:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4202,"name":"bytes","nodeType":"ElementaryTypeName","src":"10370:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"amount","nameLocation":"10395:6:11","nodeType":"VariableDeclaration","scope":4251,"src":"10387:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4204,"name":"uint256","nodeType":"ElementaryTypeName","src":"10387:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10369:33:11"},"returnParameters":{"id":4210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4251,"src":"10430:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4208,"name":"bool","nodeType":"ElementaryTypeName","src":"10430:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10429:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4278,"nodeType":"FunctionDefinition","src":"10942:216:11","nodes":[],"body":{"id":4277,"nodeType":"Block","src":"11015:143:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4259,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11029:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11045:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11037:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4260,"name":"address","nodeType":"ElementaryTypeName","src":"11037:7:11","typeDescriptions":{}}},"id":4263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11037:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11029:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4268,"nodeType":"IfStatement","src":"11025:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4265,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11056:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11056:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4267,"nodeType":"RevertStatement","src":"11049:20:11"}},{"expression":{"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4269,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"11079:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4270,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11105:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11079:30:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4272,"nodeType":"ExpressionStatement","src":"11079:30:11"},{"eventCall":{"arguments":[{"id":4274,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11146:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4273,"name":"UpdatedSystemContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4885,"src":"11124:21:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11124:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4276,"nodeType":"EmitStatement","src":"11119:32:11"}]},"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"10788:149:11","text":" @dev Updates system contract address. Can only be updated by the fungible module.\n @param addr, new system contract address."},"functionSelector":"c835d7cc","implemented":true,"kind":"function","modifiers":[{"id":4257,"kind":"modifierInvocation","modifierName":{"id":4256,"name":"onlyFungible","nameLocations":["11002:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11002:12:11"},"nodeType":"ModifierInvocation","src":"11002:12:11"}],"name":"updateSystemContractAddress","nameLocation":"10951:27:11","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"addr","nameLocation":"10987:4:11","nodeType":"VariableDeclaration","scope":4278,"src":"10979:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4253,"name":"address","nodeType":"ElementaryTypeName","src":"10979:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10978:14:11"},"returnParameters":{"id":4258,"nodeType":"ParameterList","parameters":[],"src":"11015:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4305,"nodeType":"FunctionDefinition","src":"11320:193:11","nodes":[],"body":{"id":4304,"nodeType":"Block","src":"11386:127:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4286,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11400:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11416:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11408:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4287,"name":"address","nodeType":"ElementaryTypeName","src":"11408:7:11","typeDescriptions":{}}},"id":4290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11408:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11400:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4295,"nodeType":"IfStatement","src":"11396:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4292,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11427:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11427:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4294,"nodeType":"RevertStatement","src":"11420:20:11"}},{"expression":{"id":4298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4296,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"11450:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4297,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11467:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11450:21:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4299,"nodeType":"ExpressionStatement","src":"11450:21:11"},{"eventCall":{"arguments":[{"id":4301,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11501:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4300,"name":"UpdatedGateway","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4889,"src":"11486:14:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11486:20:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4303,"nodeType":"EmitStatement","src":"11481:25:11"}]},"documentation":{"id":4279,"nodeType":"StructuredDocumentation","src":"11164:151:11","text":" @dev Updates gateway contract address. Can only be updated by the fungible module.\n @param addr, new gateway contract address."},"functionSelector":"ccc77599","implemented":true,"kind":"function","modifiers":[{"id":4284,"kind":"modifierInvocation","modifierName":{"id":4283,"name":"onlyFungible","nameLocations":["11373:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11373:12:11"},"nodeType":"ModifierInvocation","src":"11373:12:11"}],"name":"updateGatewayAddress","nameLocation":"11329:20:11","parameters":{"id":4282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4281,"mutability":"mutable","name":"addr","nameLocation":"11358:4:11","nodeType":"VariableDeclaration","scope":4305,"src":"11350:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4280,"name":"address","nodeType":"ElementaryTypeName","src":"11350:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11349:14:11"},"returnParameters":{"id":4285,"nodeType":"ParameterList","parameters":[],"src":"11386:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4322,"nodeType":"FunctionDefinition","src":"11650:144:11","nodes":[],"body":{"id":4321,"nodeType":"Block","src":"11715:79:11","nodes":[],"statements":[{"expression":{"id":4315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4313,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11725:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4314,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4308,"src":"11737:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11725:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4316,"nodeType":"ExpressionStatement","src":"11725:21:11"},{"eventCall":{"arguments":[{"id":4318,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11777:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4317,"name":"UpdatedGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"11761:15:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11761:26:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4320,"nodeType":"EmitStatement","src":"11756:31:11"}]},"documentation":{"id":4306,"nodeType":"StructuredDocumentation","src":"11519:126:11","text":" @dev Updates gas limit. Can only be updated by the fungible module.\n @param gasLimit_, new gas limit."},"functionSelector":"f687d12a","implemented":true,"kind":"function","modifiers":[{"id":4311,"kind":"modifierInvocation","modifierName":{"id":4310,"name":"onlyFungible","nameLocations":["11702:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11702:12:11"},"nodeType":"ModifierInvocation","src":"11702:12:11"}],"name":"updateGasLimit","nameLocation":"11659:14:11","parameters":{"id":4309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4308,"mutability":"mutable","name":"gasLimit_","nameLocation":"11682:9:11","nodeType":"VariableDeclaration","scope":4322,"src":"11674:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4307,"name":"uint256","nodeType":"ElementaryTypeName","src":"11674:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11673:19:11"},"returnParameters":{"id":4312,"nodeType":"ParameterList","parameters":[],"src":"11715:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4339,"nodeType":"FunctionDefinition","src":"11954:188:11","nodes":[],"body":{"id":4338,"nodeType":"Block","src":"12033:109:11","nodes":[],"statements":[{"expression":{"id":4332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4330,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12043:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4331,"name":"protocolFlatFee_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"12063:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12043:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4333,"nodeType":"ExpressionStatement","src":"12043:36:11"},{"eventCall":{"arguments":[{"id":4335,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12117:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4334,"name":"UpdatedProtocolFlatFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"12094:22:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12094:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4337,"nodeType":"EmitStatement","src":"12089:46:11"}]},"documentation":{"id":4323,"nodeType":"StructuredDocumentation","src":"11800:149:11","text":" @dev Updates protocol flat fee. Can only be updated by the fungible module.\n @param protocolFlatFee_, new protocol flat fee."},"functionSelector":"eddeb123","implemented":true,"kind":"function","modifiers":[{"id":4328,"kind":"modifierInvocation","modifierName":{"id":4327,"name":"onlyFungible","nameLocations":["12020:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"12020:12:11"},"nodeType":"ModifierInvocation","src":"12020:12:11"}],"name":"updateProtocolFlatFee","nameLocation":"11963:21:11","parameters":{"id":4326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4325,"mutability":"mutable","name":"protocolFlatFee_","nameLocation":"11993:16:11","nodeType":"VariableDeclaration","scope":4339,"src":"11985:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4324,"name":"uint256","nodeType":"ElementaryTypeName","src":"11985:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11984:26:11"},"returnParameters":{"id":4329,"nodeType":"ParameterList","parameters":[],"src":"12033:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":3485,"name":"IZRC20Metadata","nameLocations":["722:14:11"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"722:14:11"},"id":3486,"nodeType":"InheritanceSpecifier","src":"722:14:11"},{"baseName":{"id":3487,"name":"ZRC20Errors","nameLocations":["738:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":3484,"src":"738:11:11"},"id":3488,"nodeType":"InheritanceSpecifier","src":"738:11:11"},{"baseName":{"id":3489,"name":"ZRC20Events","nameLocations":["751:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":4898,"src":"751:11:11"},"id":3490,"nodeType":"InheritanceSpecifier","src":"751:11:11"}],"canonicalName":"ZRC20","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[4340,4898,3484,4844,4825],"name":"ZRC20","nameLocation":"713:5:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[4853,4861,4869,4881,4885,4889,4893,4897]}],"license":"MIT"},"id":11} \ No newline at end of file diff --git a/packages/tasks/src/abi/ZRC20.sol/ZRC20Errors.json b/packages/tasks/src/abi/ZRC20.sol/ZRC20Errors.json new file mode 100644 index 00000000..00dcb325 --- /dev/null +++ b/packages/tasks/src/abi/ZRC20.sol/ZRC20Errors.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InvalidSender","inputs":[]},{"type":"error","name":"LowAllowance","inputs":[]},{"type":"error","name":"LowBalance","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroGasCoin","inputs":[]},{"type":"error","name":"ZeroGasPrice","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasCoin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasPrice\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Custom errors for ZRC20\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/ZRC20.sol\":\"ZRC20Errors\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/zevm/ZRC20.sol\":{\"keccak256\":\"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e\",\"dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi\"]},\"contracts/zevm/interfaces/ISystem.sol\":{\"keccak256\":\"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d\",\"dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InvalidSender"},{"inputs":[],"type":"error","name":"LowAllowance"},{"inputs":[],"type":"error","name":"LowBalance"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroGasCoin"},{"inputs":[],"type":"error","name":"ZeroGasPrice"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/ZRC20.sol":"ZRC20Errors"},"evmVersion":"london","libraries":{}},"sources":{"contracts/zevm/ZRC20.sol":{"keccak256":"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc","urls":["bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e","dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi"],"license":"MIT"},"contracts/zevm/interfaces/ISystem.sol":{"keccak256":"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df","urls":["bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d","dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/zevm/ZRC20.sol","id":4341,"exportedSymbols":{"CoinType":[4903],"ISystem":[4618],"IZRC20":[4825],"IZRC20Metadata":[4844],"ZRC20":[4340],"ZRC20Errors":[3484],"ZRC20Events":[4898]},"nodeType":"SourceUnit","src":"32:12113:11","nodes":[{"id":3464,"nodeType":"PragmaDirective","src":"32:23:11","nodes":[],"literals":["solidity","0.8",".26"]},{"id":3465,"nodeType":"ImportDirective","src":"57:53:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/ISystem.sol","file":"../../contracts/zevm/interfaces/ISystem.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4619,"symbolAliases":[],"unitAlias":""},{"id":3466,"nodeType":"ImportDirective","src":"111:52:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"../../contracts/zevm/interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4904,"symbolAliases":[],"unitAlias":""},{"id":3484,"nodeType":"ContractDefinition","src":"205:316:11","nodes":[{"id":3469,"nodeType":"ErrorDefinition","src":"298:34:11","nodes":[],"errorSelector":"2b2add3d","name":"CallerIsNotFungibleModule","nameLocation":"304:25:11","parameters":{"id":3468,"nodeType":"ParameterList","parameters":[],"src":"329:2:11"}},{"id":3471,"nodeType":"ErrorDefinition","src":"337:22:11","nodes":[],"errorSelector":"ddb5de5e","name":"InvalidSender","nameLocation":"343:13:11","parameters":{"id":3470,"nodeType":"ParameterList","parameters":[],"src":"356:2:11"}},{"id":3473,"nodeType":"ErrorDefinition","src":"364:29:11","nodes":[],"errorSelector":"0a7cd6d6","name":"GasFeeTransferFailed","nameLocation":"370:20:11","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"390:2:11"}},{"id":3475,"nodeType":"ErrorDefinition","src":"398:20:11","nodes":[],"errorSelector":"78fff396","name":"ZeroGasCoin","nameLocation":"404:11:11","parameters":{"id":3474,"nodeType":"ParameterList","parameters":[],"src":"415:2:11"}},{"id":3477,"nodeType":"ErrorDefinition","src":"423:21:11","nodes":[],"errorSelector":"e661aed0","name":"ZeroGasPrice","nameLocation":"429:12:11","parameters":{"id":3476,"nodeType":"ParameterList","parameters":[],"src":"441:2:11"}},{"id":3479,"nodeType":"ErrorDefinition","src":"449:21:11","nodes":[],"errorSelector":"10bad147","name":"LowAllowance","nameLocation":"455:12:11","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"467:2:11"}},{"id":3481,"nodeType":"ErrorDefinition","src":"475:19:11","nodes":[],"errorSelector":"fe382aa7","name":"LowBalance","nameLocation":"481:10:11","parameters":{"id":3480,"nodeType":"ParameterList","parameters":[],"src":"491:2:11"}},{"id":3483,"nodeType":"ErrorDefinition","src":"499:20:11","nodes":[],"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"505:11:11","parameters":{"id":3482,"nodeType":"ParameterList","parameters":[],"src":"516:2:11"}}],"abstract":false,"baseContracts":[],"canonicalName":"ZRC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":3467,"nodeType":"StructuredDocumentation","src":"165:39:11","text":" @dev Custom errors for ZRC20"},"fullyImplemented":true,"linearizedBaseContracts":[3484],"name":"ZRC20Errors","nameLocation":"215:11:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[]},{"id":4340,"nodeType":"ContractDefinition","src":"704:11440:11","nodes":[{"id":3494,"nodeType":"VariableDeclaration","src":"855:92:11","nodes":[],"constant":true,"documentation":{"id":3491,"nodeType":"StructuredDocumentation","src":"769:81:11","text":"@notice Fungible address is always the same, maintained at the protocol level"},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"879:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3492,"name":"address","nodeType":"ElementaryTypeName","src":"855:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":3493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"905:42:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":3497,"nodeType":"VariableDeclaration","src":"982:33:11","nodes":[],"constant":false,"documentation":{"id":3495,"nodeType":"StructuredDocumentation","src":"953:24:11","text":"@notice Chain id.abi"},"functionSelector":"85e1f4d0","mutability":"immutable","name":"CHAIN_ID","nameLocation":"1007:8:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3496,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3501,"nodeType":"VariableDeclaration","src":"1073:35:11","nodes":[],"constant":false,"documentation":{"id":3498,"nodeType":"StructuredDocumentation","src":"1021:47:11","text":"@notice Coin type, checkout Interfaces.sol."},"functionSelector":"a3413d03","mutability":"immutable","name":"COIN_TYPE","nameLocation":"1099:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3500,"nodeType":"UserDefinedTypeName","pathNode":{"id":3499,"name":"CoinType","nameLocations":["1073:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"1073:8:11"},"referencedDeclaration":4903,"src":"1073:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"public"},{"id":3504,"nodeType":"VariableDeclaration","src":"1234:38:11","nodes":[],"constant":false,"documentation":{"id":3502,"nodeType":"StructuredDocumentation","src":"1114:115:11","text":"@notice System contract address.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"f2441b32","mutability":"mutable","name":"SYSTEM_CONTRACT_ADDRESS","nameLocation":"1249:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3503,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3507,"nodeType":"VariableDeclaration","src":"1384:24:11","nodes":[],"baseFunctions":[4814],"constant":false,"documentation":{"id":3505,"nodeType":"StructuredDocumentation","src":"1278:101:11","text":"@notice Gas limit.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"091d2788","mutability":"mutable","name":"GAS_LIMIT","nameLocation":"1399:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3506,"name":"uint256","nodeType":"ElementaryTypeName","src":"1384:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3511,"nodeType":"VariableDeclaration","src":"1528:41:11","nodes":[],"baseFunctions":[4808],"constant":false,"documentation":{"id":3508,"nodeType":"StructuredDocumentation","src":"1414:109:11","text":"@notice Protocol flat fee.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"4d8943bb","mutability":"mutable","name":"PROTOCOL_FLAT_FEE","nameLocation":"1552:17:11","overrides":{"id":3510,"nodeType":"OverrideSpecifier","overrides":[],"src":"1543:8:11"},"scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3515,"nodeType":"VariableDeclaration","src":"1576:45:11","nodes":[],"constant":false,"mutability":"mutable","name":"_balances","nameLocation":"1612:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3514,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3512,"name":"address","nodeType":"ElementaryTypeName","src":"1584:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1576:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3513,"name":"uint256","nodeType":"ElementaryTypeName","src":"1595:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"id":3521,"nodeType":"VariableDeclaration","src":"1627:67:11","nodes":[],"constant":false,"mutability":"mutable","name":"_allowances","nameLocation":"1683:11:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3520,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3516,"name":"address","nodeType":"ElementaryTypeName","src":"1635:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1627:47:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3519,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3517,"name":"address","nodeType":"ElementaryTypeName","src":"1654:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1646:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"id":3523,"nodeType":"VariableDeclaration","src":"1700:28:11","nodes":[],"constant":false,"mutability":"mutable","name":"_totalSupply","nameLocation":"1716:12:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3522,"name":"uint256","nodeType":"ElementaryTypeName","src":"1700:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":3525,"nodeType":"VariableDeclaration","src":"1734:20:11","nodes":[],"constant":false,"mutability":"mutable","name":"_name","nameLocation":"1749:5:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3524,"name":"string","nodeType":"ElementaryTypeName","src":"1734:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3527,"nodeType":"VariableDeclaration","src":"1760:22:11","nodes":[],"constant":false,"mutability":"mutable","name":"_symbol","nameLocation":"1775:7:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3526,"name":"string","nodeType":"ElementaryTypeName","src":"1760:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3529,"nodeType":"VariableDeclaration","src":"1788:23:11","nodes":[],"constant":false,"mutability":"mutable","name":"_decimals","nameLocation":"1802:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3528,"name":"uint8","nodeType":"ElementaryTypeName","src":"1788:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"id":3532,"nodeType":"VariableDeclaration","src":"1958:29:11","nodes":[],"constant":false,"documentation":{"id":3530,"nodeType":"StructuredDocumentation","src":"1818:135:11","text":"@notice Gateway contract address.\n @dev This variable is added at last position to maintain storage layout with ZRC20.sol v1"},"functionSelector":"8b851b95","mutability":"mutable","name":"gatewayAddress","nameLocation":"1973:14:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3531,"name":"address","nodeType":"ElementaryTypeName","src":"1958:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3541,"nodeType":"FunctionDefinition","src":"1994:96:11","nodes":[],"body":{"id":3540,"nodeType":"Block","src":"2056:34:11","nodes":[],"statements":[{"expression":{"expression":{"id":3537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2073:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2077:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2073:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3536,"id":3539,"nodeType":"Return","src":"2066:17:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"2003:10:11","parameters":{"id":3533,"nodeType":"ParameterList","parameters":[],"src":"2013:2:11"},"returnParameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3541,"src":"2047:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3534,"name":"address","nodeType":"ElementaryTypeName","src":"2047:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2046:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":3554,"nodeType":"ModifierDefinition","src":"2155:129:11","nodes":[],"body":{"id":3553,"nodeType":"Block","src":"2179:105:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3544,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2193:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2197:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2193:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3546,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2207:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2193:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3551,"nodeType":"IfStatement","src":"2189:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3548,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2239:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2239:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3550,"nodeType":"RevertStatement","src":"2232:34:11"}},{"id":3552,"nodeType":"PlaceholderStatement","src":"2276:1:11"}]},"documentation":{"id":3542,"nodeType":"StructuredDocumentation","src":"2096:54:11","text":" @dev Only fungible module modifier."},"name":"onlyFungible","nameLocation":"2164:12:11","parameters":{"id":3543,"nodeType":"ParameterList","parameters":[],"src":"2176:2:11"},"virtual":false,"visibility":"internal"},{"id":3633,"nodeType":"FunctionDefinition","src":"2380:728:11","nodes":[],"body":{"id":3632,"nodeType":"Block","src":"2637:471:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3575,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2651:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2655:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2651:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3577,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2665:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2651:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3582,"nodeType":"IfStatement","src":"2647:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3579,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2697:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2697:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3581,"nodeType":"RevertStatement","src":"2690:34:11"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3583,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"2738:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2772:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2764:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3584,"name":"address","nodeType":"ElementaryTypeName","src":"2764:7:11","typeDescriptions":{}}},"id":3587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2764:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2738:36:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3589,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"2778:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2805:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2797:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3590,"name":"address","nodeType":"ElementaryTypeName","src":"2797:7:11","typeDescriptions":{}}},"id":3593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2797:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2778:29:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2738:69:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3599,"nodeType":"IfStatement","src":"2734:95:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3596,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"2816:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2816:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3598,"nodeType":"RevertStatement","src":"2809:20:11"}},{"expression":{"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3600,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"2839:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3601,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2847:5:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2839:13:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3603,"nodeType":"ExpressionStatement","src":"2839:13:11"},{"expression":{"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3604,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"2862:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3605,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3559,"src":"2872:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2862:17:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3607,"nodeType":"ExpressionStatement","src":"2862:17:11"},{"expression":{"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3608,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"2889:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3609,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3561,"src":"2901:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2889:21:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":3611,"nodeType":"ExpressionStatement","src":"2889:21:11"},{"expression":{"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3612,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"2920:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3613,"name":"chainid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"2931:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2920:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3615,"nodeType":"ExpressionStatement","src":"2920:19:11"},{"expression":{"id":3618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3616,"name":"COIN_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"2949:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3617,"name":"coinType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3566,"src":"2961:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"src":"2949:21:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"id":3619,"nodeType":"ExpressionStatement","src":"2949:21:11"},{"expression":{"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3620,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"2980:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3621,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"2992:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2980:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3623,"nodeType":"ExpressionStatement","src":"2980:21:11"},{"expression":{"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3624,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"3011:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3625,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"3037:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3011:48:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3627,"nodeType":"ExpressionStatement","src":"3011:48:11"},{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3628,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"3069:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3629,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"3086:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3069:32:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3631,"nodeType":"ExpressionStatement","src":"3069:32:11"}]},"documentation":{"id":3555,"nodeType":"StructuredDocumentation","src":"2290:85:11","text":" @dev The only one allowed to deploy new ZRC20 is fungible address."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3557,"mutability":"mutable","name":"name_","nameLocation":"2415:5:11","nodeType":"VariableDeclaration","scope":3633,"src":"2401:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3556,"name":"string","nodeType":"ElementaryTypeName","src":"2401:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3559,"mutability":"mutable","name":"symbol_","nameLocation":"2444:7:11","nodeType":"VariableDeclaration","scope":3633,"src":"2430:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3558,"name":"string","nodeType":"ElementaryTypeName","src":"2430:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3561,"mutability":"mutable","name":"decimals_","nameLocation":"2467:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2461:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3560,"name":"uint8","nodeType":"ElementaryTypeName","src":"2461:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3563,"mutability":"mutable","name":"chainid_","nameLocation":"2494:8:11","nodeType":"VariableDeclaration","scope":3633,"src":"2486:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"2486:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3566,"mutability":"mutable","name":"coinType_","nameLocation":"2521:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2512:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3565,"nodeType":"UserDefinedTypeName","pathNode":{"id":3564,"name":"CoinType","nameLocations":["2512:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"2512:8:11"},"referencedDeclaration":4903,"src":"2512:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"internal"},{"constant":false,"id":3568,"mutability":"mutable","name":"gasLimit_","nameLocation":"2548:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2540:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3567,"name":"uint256","nodeType":"ElementaryTypeName","src":"2540:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3570,"mutability":"mutable","name":"systemContractAddress_","nameLocation":"2575:22:11","nodeType":"VariableDeclaration","scope":3633,"src":"2567:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3569,"name":"address","nodeType":"ElementaryTypeName","src":"2567:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3572,"mutability":"mutable","name":"gatewayAddress_","nameLocation":"2615:15:11","nodeType":"VariableDeclaration","scope":3633,"src":"2607:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3571,"name":"address","nodeType":"ElementaryTypeName","src":"2607:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2391:245:11"},"returnParameters":{"id":3574,"nodeType":"ParameterList","parameters":[],"src":"2637:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":3643,"nodeType":"FunctionDefinition","src":"3183:98:11","nodes":[],"body":{"id":3642,"nodeType":"Block","src":"3252:29:11","nodes":[],"statements":[{"expression":{"id":3640,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3269:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3639,"id":3641,"nodeType":"Return","src":"3262:12:11"}]},"baseFunctions":[4833],"documentation":{"id":3634,"nodeType":"StructuredDocumentation","src":"3114:64:11","text":" @dev ZRC20 name\n @return name as string"},"functionSelector":"06fdde03","implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"3192:4:11","overrides":{"id":3636,"nodeType":"OverrideSpecifier","overrides":[],"src":"3219:8:11"},"parameters":{"id":3635,"nodeType":"ParameterList","parameters":[],"src":"3196:2:11"},"returnParameters":{"id":3639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3643,"src":"3237:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3637,"name":"string","nodeType":"ElementaryTypeName","src":"3237:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3236:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3657,"nodeType":"FunctionDefinition","src":"3363:103:11","nodes":[],"body":{"id":3656,"nodeType":"Block","src":"3434:32:11","nodes":[],"statements":[{"expression":{"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3652,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3444:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3653,"name":"newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"3452:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3444:15:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3655,"nodeType":"ExpressionStatement","src":"3444:15:11"}]},"baseFunctions":[4819],"documentation":{"id":3644,"nodeType":"StructuredDocumentation","src":"3287:71:11","text":" @dev Name can be updated by fungible module account."},"functionSelector":"c47f0027","implemented":true,"kind":"function","modifiers":[{"id":3650,"kind":"modifierInvocation","modifierName":{"id":3649,"name":"onlyFungible","nameLocations":["3421:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3421:12:11"},"nodeType":"ModifierInvocation","src":"3421:12:11"}],"name":"setName","nameLocation":"3372:7:11","overrides":{"id":3648,"nodeType":"OverrideSpecifier","overrides":[],"src":"3412:8:11"},"parameters":{"id":3647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3646,"mutability":"mutable","name":"newName","nameLocation":"3394:7:11","nodeType":"VariableDeclaration","scope":3657,"src":"3380:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3645,"name":"string","nodeType":"ElementaryTypeName","src":"3380:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3379:23:11"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"3434:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3671,"nodeType":"FunctionDefinition","src":"3550:111:11","nodes":[],"body":{"id":3670,"nodeType":"Block","src":"3625:36:11","nodes":[],"statements":[{"expression":{"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3666,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3635:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3667,"name":"newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3660,"src":"3645:9:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3635:19:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3669,"nodeType":"ExpressionStatement","src":"3635:19:11"}]},"baseFunctions":[4824],"documentation":{"id":3658,"nodeType":"StructuredDocumentation","src":"3472:73:11","text":" @dev Symbol can be updated by fungible module account."},"functionSelector":"b84c8246","implemented":true,"kind":"function","modifiers":[{"id":3664,"kind":"modifierInvocation","modifierName":{"id":3663,"name":"onlyFungible","nameLocations":["3612:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3612:12:11"},"nodeType":"ModifierInvocation","src":"3612:12:11"}],"name":"setSymbol","nameLocation":"3559:9:11","overrides":{"id":3662,"nodeType":"OverrideSpecifier","overrides":[],"src":"3603:8:11"},"parameters":{"id":3661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3660,"mutability":"mutable","name":"newSymbol","nameLocation":"3583:9:11","nodeType":"VariableDeclaration","scope":3671,"src":"3569:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3659,"name":"string","nodeType":"ElementaryTypeName","src":"3569:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3568:25:11"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"3625:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3681,"nodeType":"FunctionDefinition","src":"3742:102:11","nodes":[],"body":{"id":3680,"nodeType":"Block","src":"3813:31:11","nodes":[],"statements":[{"expression":{"id":3678,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3830:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3677,"id":3679,"nodeType":"Return","src":"3823:14:11"}]},"baseFunctions":[4838],"documentation":{"id":3672,"nodeType":"StructuredDocumentation","src":"3667:70:11","text":" @dev ZRC20 symbol.\n @return symbol as string."},"functionSelector":"95d89b41","implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"3751:6:11","overrides":{"id":3674,"nodeType":"OverrideSpecifier","overrides":[],"src":"3780:8:11"},"parameters":{"id":3673,"nodeType":"ParameterList","parameters":[],"src":"3757:2:11"},"returnParameters":{"id":3677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3681,"src":"3798:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3675,"name":"string","nodeType":"ElementaryTypeName","src":"3798:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3797:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3691,"nodeType":"FunctionDefinition","src":"3933:98:11","nodes":[],"body":{"id":3690,"nodeType":"Block","src":"3998:33:11","nodes":[],"statements":[{"expression":{"id":3688,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"4015:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":3687,"id":3689,"nodeType":"Return","src":"4008:16:11"}]},"baseFunctions":[4843],"documentation":{"id":3682,"nodeType":"StructuredDocumentation","src":"3850:78:11","text":" @dev ZRC20 decimals.\n @return returns uint8 decimals."},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3942:8:11","overrides":{"id":3684,"nodeType":"OverrideSpecifier","overrides":[],"src":"3973:8:11"},"parameters":{"id":3683,"nodeType":"ParameterList","parameters":[],"src":"3950:2:11"},"returnParameters":{"id":3687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3691,"src":"3991:5:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3685,"name":"uint8","nodeType":"ElementaryTypeName","src":"3991:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3990:7:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3701,"nodeType":"FunctionDefinition","src":"4130:106:11","nodes":[],"body":{"id":3700,"nodeType":"Block","src":"4200:36:11","nodes":[],"statements":[{"expression":{"id":3698,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"4217:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3697,"id":3699,"nodeType":"Return","src":"4210:19:11"}]},"baseFunctions":[4716],"documentation":{"id":3692,"nodeType":"StructuredDocumentation","src":"4037:88:11","text":" @dev ZRC20 total supply.\n @return returns uint256 total supply."},"functionSelector":"18160ddd","implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"4139:11:11","overrides":{"id":3694,"nodeType":"OverrideSpecifier","overrides":[],"src":"4173:8:11"},"parameters":{"id":3693,"nodeType":"ParameterList","parameters":[],"src":"4150:2:11"},"returnParameters":{"id":3697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3701,"src":"4191:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3695,"name":"uint256","nodeType":"ElementaryTypeName","src":"4191:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4190:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3715,"nodeType":"FunctionDefinition","src":"4418:125:11","nodes":[],"body":{"id":3714,"nodeType":"Block","src":"4501:42:11","nodes":[],"statements":[{"expression":{"baseExpression":{"id":3710,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"4518:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3712,"indexExpression":{"id":3711,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3704,"src":"4528:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4518:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3709,"id":3713,"nodeType":"Return","src":"4511:25:11"}]},"baseFunctions":[4723],"documentation":{"id":3702,"nodeType":"StructuredDocumentation","src":"4242:171:11","text":" @dev Returns ZRC20 balance of an account.\n @param account, account address for which balance is requested.\n @return uint256 account balance."},"functionSelector":"70a08231","implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"4427:9:11","overrides":{"id":3706,"nodeType":"OverrideSpecifier","overrides":[],"src":"4474:8:11"},"parameters":{"id":3705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"account","nameLocation":"4445:7:11","nodeType":"VariableDeclaration","scope":3715,"src":"4437:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3703,"name":"address","nodeType":"ElementaryTypeName","src":"4437:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4436:17:11"},"returnParameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3715,"src":"4492:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3707,"name":"uint256","nodeType":"ElementaryTypeName","src":"4492:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4491:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3736,"nodeType":"FunctionDefinition","src":"4741:172:11","nodes":[],"body":{"id":3735,"nodeType":"Block","src":"4833:80:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3727,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"4853:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4853:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3729,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"4867:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3730,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3720,"src":"4878:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3726,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"4843:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4843:42:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3732,"nodeType":"ExpressionStatement","src":"4843:42:11"},{"expression":{"hexValue":"74727565","id":3733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4902:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3725,"id":3734,"nodeType":"Return","src":"4895:11:11"}]},"baseFunctions":[4732],"documentation":{"id":3716,"nodeType":"StructuredDocumentation","src":"4549:187:11","text":" @dev Returns ZRC20 balance of an account.\n @param recipient, recipiuent address to which transfer is done.\n @return true/false if transfer succeeded/failed."},"functionSelector":"a9059cbb","implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4750:8:11","overrides":{"id":3722,"nodeType":"OverrideSpecifier","overrides":[],"src":"4809:8:11"},"parameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3718,"mutability":"mutable","name":"recipient","nameLocation":"4767:9:11","nodeType":"VariableDeclaration","scope":3736,"src":"4759:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3717,"name":"address","nodeType":"ElementaryTypeName","src":"4759:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3720,"mutability":"mutable","name":"amount","nameLocation":"4786:6:11","nodeType":"VariableDeclaration","scope":3736,"src":"4778:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4778:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4758:35:11"},"returnParameters":{"id":3725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3736,"src":"4827:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3723,"name":"bool","nodeType":"ElementaryTypeName","src":"4827:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4826:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3754,"nodeType":"FunctionDefinition","src":"5064:149:11","nodes":[],"body":{"id":3753,"nodeType":"Block","src":"5162:51:11","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":3747,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"5179:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3749,"indexExpression":{"id":3748,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3739,"src":"5191:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3751,"indexExpression":{"id":3750,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"5198:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3746,"id":3752,"nodeType":"Return","src":"5172:34:11"}]},"baseFunctions":[4741],"documentation":{"id":3737,"nodeType":"StructuredDocumentation","src":"4919:140:11","text":" @dev Returns token allowance from owner to spender.\n @param owner, owner address.\n @return uint256 allowance."},"functionSelector":"dd62ed3e","implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"5073:9:11","overrides":{"id":3743,"nodeType":"OverrideSpecifier","overrides":[],"src":"5135:8:11"},"parameters":{"id":3742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3739,"mutability":"mutable","name":"owner","nameLocation":"5091:5:11","nodeType":"VariableDeclaration","scope":3754,"src":"5083:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3738,"name":"address","nodeType":"ElementaryTypeName","src":"5083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"spender","nameLocation":"5106:7:11","nodeType":"VariableDeclaration","scope":3754,"src":"5098:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3740,"name":"address","nodeType":"ElementaryTypeName","src":"5098:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5082:32:11"},"returnParameters":{"id":3746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3754,"src":"5153:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3744,"name":"uint256","nodeType":"ElementaryTypeName","src":"5153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5152:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3775,"nodeType":"FunctionDefinition","src":"5417:166:11","nodes":[],"body":{"id":3774,"nodeType":"Block","src":"5506:77:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3766,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"5525:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5525:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3768,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3757,"src":"5539:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3759,"src":"5548:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3765,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"5516:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:39:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3771,"nodeType":"ExpressionStatement","src":"5516:39:11"},{"expression":{"hexValue":"74727565","id":3772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5572:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3764,"id":3773,"nodeType":"Return","src":"5565:11:11"}]},"baseFunctions":[4750],"documentation":{"id":3755,"nodeType":"StructuredDocumentation","src":"5219:193:11","text":" @dev Approves amount transferFrom for spender.\n @param spender, spender address.\n @param amount, amount to approve.\n @return true/false if succeeded/failed."},"functionSelector":"095ea7b3","implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"5426:7:11","overrides":{"id":3761,"nodeType":"OverrideSpecifier","overrides":[],"src":"5482:8:11"},"parameters":{"id":3760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"spender","nameLocation":"5442:7:11","nodeType":"VariableDeclaration","scope":3775,"src":"5434:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3756,"name":"address","nodeType":"ElementaryTypeName","src":"5434:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3759,"mutability":"mutable","name":"amount","nameLocation":"5459:6:11","nodeType":"VariableDeclaration","scope":3775,"src":"5451:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3758,"name":"uint256","nodeType":"ElementaryTypeName","src":"5451:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5433:33:11"},"returnParameters":{"id":3764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3775,"src":"5500:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3762,"name":"bool","nodeType":"ElementaryTypeName","src":"5500:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5499:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3822,"nodeType":"FunctionDefinition","src":"5831:388:11","nodes":[],"body":{"id":3821,"nodeType":"Block","src":"5943:276:11","nodes":[],"statements":[{"expression":{"arguments":[{"id":3789,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"5963:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3790,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3780,"src":"5971:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3791,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"5982:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3788,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"5953:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5953:36:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3793,"nodeType":"ExpressionStatement","src":"5953:36:11"},{"assignments":[3795],"declarations":[{"constant":false,"id":3795,"mutability":"mutable","name":"currentAllowance","nameLocation":"6008:16:11","nodeType":"VariableDeclaration","scope":3821,"src":"6000:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3794,"name":"uint256","nodeType":"ElementaryTypeName","src":"6000:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3802,"initialValue":{"baseExpression":{"baseExpression":{"id":3796,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"6027:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3798,"indexExpression":{"id":3797,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6039:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:19:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3801,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3799,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6047:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6047:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:33:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6000:60:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3803,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6074:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3804,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6093:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6074:25:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3809,"nodeType":"IfStatement","src":"6070:52:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3806,"name":"LowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3479,"src":"6108:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6108:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3808,"nodeType":"RevertStatement","src":"6101:21:11"}},{"expression":{"arguments":[{"id":3811,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6142:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":3812,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6150:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6150:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3814,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6164:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6183:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6164:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3810,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"6133:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6133:57:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3818,"nodeType":"ExpressionStatement","src":"6133:57:11"},{"expression":{"hexValue":"74727565","id":3819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6208:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3787,"id":3820,"nodeType":"Return","src":"6201:11:11"}]},"baseFunctions":[4761],"documentation":{"id":3776,"nodeType":"StructuredDocumentation","src":"5589:237:11","text":" @dev Transfers tokens from sender to recipient.\n @param sender, sender address.\n @param recipient, recipient address.\n @param amount, amount to transfer.\n @return true/false if succeeded/failed."},"functionSelector":"23b872dd","implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5840:12:11","overrides":{"id":3784,"nodeType":"OverrideSpecifier","overrides":[],"src":"5919:8:11"},"parameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3778,"mutability":"mutable","name":"sender","nameLocation":"5861:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3777,"name":"address","nodeType":"ElementaryTypeName","src":"5853:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3780,"mutability":"mutable","name":"recipient","nameLocation":"5877:9:11","nodeType":"VariableDeclaration","scope":3822,"src":"5869:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"amount","nameLocation":"5896:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5888:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5888:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5852:51:11"},"returnParameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3822,"src":"5937:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3785,"name":"bool","nodeType":"ElementaryTypeName","src":"5937:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5936:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3840,"nodeType":"FunctionDefinition","src":"6365:126:11","nodes":[],"body":{"id":3839,"nodeType":"Block","src":"6428:63:11","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":3832,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6444:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6448:6:11","memberName":"sender","nodeType":"MemberAccess","src":"6444:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3834,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3825,"src":"6456:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3831,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"6438:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6438:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3836,"nodeType":"ExpressionStatement","src":"6438:25:11"},{"expression":{"hexValue":"74727565","id":3837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6480:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3830,"id":3838,"nodeType":"Return","src":"6473:11:11"}]},"baseFunctions":[4777],"documentation":{"id":3823,"nodeType":"StructuredDocumentation","src":"6225:135:11","text":" @dev Burns an amount of tokens.\n @param amount, amount to burn.\n @return true/false if succeeded/failed."},"functionSelector":"42966c68","implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"6374:4:11","overrides":{"id":3827,"nodeType":"OverrideSpecifier","overrides":[],"src":"6404:8:11"},"parameters":{"id":3826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3825,"mutability":"mutable","name":"amount","nameLocation":"6387:6:11","nodeType":"VariableDeclaration","scope":3840,"src":"6379:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3824,"name":"uint256","nodeType":"ElementaryTypeName","src":"6379:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6378:16:11"},"returnParameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3840,"src":"6422:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3828,"name":"bool","nodeType":"ElementaryTypeName","src":"6422:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6421:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3903,"nodeType":"FunctionDefinition","src":"6497:462:11","nodes":[],"body":{"id":3902,"nodeType":"Block","src":"6584:375:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3849,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6598:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6616:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6608:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3850,"name":"address","nodeType":"ElementaryTypeName","src":"6608:7:11","typeDescriptions":{}}},"id":3853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6608:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6598:20:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3858,"nodeType":"IfStatement","src":"6594:46:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3855,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6627:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6627:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3857,"nodeType":"RevertStatement","src":"6620:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3859,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6654:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6675:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6667:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3860,"name":"address","nodeType":"ElementaryTypeName","src":"6667:7:11","typeDescriptions":{}}},"id":3863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6667:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6654:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3868,"nodeType":"IfStatement","src":"6650:49:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3865,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6686:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6686:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3867,"nodeType":"RevertStatement","src":"6679:20:11"}},{"assignments":[3870],"declarations":[{"constant":false,"id":3870,"mutability":"mutable","name":"senderBalance","nameLocation":"6718:13:11","nodeType":"VariableDeclaration","scope":3902,"src":"6710:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3869,"name":"uint256","nodeType":"ElementaryTypeName","src":"6710:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3874,"initialValue":{"baseExpression":{"id":3871,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6734:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3873,"indexExpression":{"id":3872,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6744:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6734:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6710:41:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3875,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6765:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3876,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6781:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6765:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3881,"nodeType":"IfStatement","src":"6761:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3878,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"6796:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3880,"nodeType":"RevertStatement","src":"6789:19:11"}},{"expression":{"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3882,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6819:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3884,"indexExpression":{"id":3883,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6829:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6819:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3885,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6839:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6855:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6839:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6819:42:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3889,"nodeType":"ExpressionStatement","src":"6819:42:11"},{"expression":{"id":3894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3890,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6871:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3892,"indexExpression":{"id":3891,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6881:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6871:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3893,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6895:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6871:30:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3895,"nodeType":"ExpressionStatement","src":"6871:30:11"},{"eventCall":{"arguments":[{"id":3897,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6926:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3898,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6934:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3899,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6945:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3896,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"6917:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6917:35:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3901,"nodeType":"EmitStatement","src":"6912:40:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6506:9:11","parameters":{"id":3847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"sender","nameLocation":"6524:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6516:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3841,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3844,"mutability":"mutable","name":"recipient","nameLocation":"6540:9:11","nodeType":"VariableDeclaration","scope":3903,"src":"6532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3843,"name":"address","nodeType":"ElementaryTypeName","src":"6532:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3846,"mutability":"mutable","name":"amount","nameLocation":"6559:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6551:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3845,"name":"uint256","nodeType":"ElementaryTypeName","src":"6551:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6515:51:11"},"returnParameters":{"id":3848,"nodeType":"ParameterList","parameters":[],"src":"6584:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3940,"nodeType":"FunctionDefinition","src":"6965:252:11","nodes":[],"body":{"id":3939,"nodeType":"Block","src":"7030:187:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3910,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7044:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7063:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7055:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3911,"name":"address","nodeType":"ElementaryTypeName","src":"7055:7:11","typeDescriptions":{}}},"id":3914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7055:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7044:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3919,"nodeType":"IfStatement","src":"7040:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3916,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7074:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7074:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3918,"nodeType":"RevertStatement","src":"7067:20:11"}},{"expression":{"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3920,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7098:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3921,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7114:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7098:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3923,"nodeType":"ExpressionStatement","src":"7098:22:11"},{"expression":{"id":3928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3924,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7130:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3926,"indexExpression":{"id":3925,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7140:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7130:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3927,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7152:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7130:28:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3929,"nodeType":"ExpressionStatement","src":"7130:28:11"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":3933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7190:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7182:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"7182:7:11","typeDescriptions":{}}},"id":3934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7182:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3935,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7194:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3936,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7203:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3930,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7173:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7173:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3938,"nodeType":"EmitStatement","src":"7168:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"6974:5:11","parameters":{"id":3908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3905,"mutability":"mutable","name":"account","nameLocation":"6988:7:11","nodeType":"VariableDeclaration","scope":3940,"src":"6980:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3904,"name":"address","nodeType":"ElementaryTypeName","src":"6980:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3907,"mutability":"mutable","name":"amount","nameLocation":"7005:6:11","nodeType":"VariableDeclaration","scope":3940,"src":"6997:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3906,"name":"uint256","nodeType":"ElementaryTypeName","src":"6997:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6979:33:11"},"returnParameters":{"id":3909,"nodeType":"ParameterList","parameters":[],"src":"7030:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3992,"nodeType":"FunctionDefinition","src":"7223:381:11","nodes":[],"body":{"id":3991,"nodeType":"Block","src":"7288:316:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3947,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7302:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7321:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7313:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3948,"name":"address","nodeType":"ElementaryTypeName","src":"7313:7:11","typeDescriptions":{}}},"id":3951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7313:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7302:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3956,"nodeType":"IfStatement","src":"7298:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3953,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7332:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3955,"nodeType":"RevertStatement","src":"7325:20:11"}},{"assignments":[3958],"declarations":[{"constant":false,"id":3958,"mutability":"mutable","name":"accountBalance","nameLocation":"7364:14:11","nodeType":"VariableDeclaration","scope":3991,"src":"7356:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3957,"name":"uint256","nodeType":"ElementaryTypeName","src":"7356:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3962,"initialValue":{"baseExpression":{"id":3959,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7381:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3961,"indexExpression":{"id":3960,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7391:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7381:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7356:43:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3963,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7413:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3964,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7430:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7413:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3969,"nodeType":"IfStatement","src":"7409:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3966,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"7445:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7445:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3968,"nodeType":"RevertStatement","src":"7438:19:11"}},{"expression":{"id":3976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3970,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7468:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3972,"indexExpression":{"id":3971,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7478:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7468:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3973,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7489:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3974,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7506:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7489:23:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7468:44:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3977,"nodeType":"ExpressionStatement","src":"7468:44:11"},{"expression":{"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3978,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7522:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3979,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7538:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3981,"nodeType":"ExpressionStatement","src":"7522:22:11"},{"eventCall":{"arguments":[{"id":3983,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7569:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":3986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7586:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7578:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3984,"name":"address","nodeType":"ElementaryTypeName","src":"7578:7:11","typeDescriptions":{}}},"id":3987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7578:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3988,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7590:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3982,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7560:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7560:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3990,"nodeType":"EmitStatement","src":"7555:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7232:5:11","parameters":{"id":3945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3942,"mutability":"mutable","name":"account","nameLocation":"7246:7:11","nodeType":"VariableDeclaration","scope":3992,"src":"7238:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3941,"name":"address","nodeType":"ElementaryTypeName","src":"7238:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3944,"mutability":"mutable","name":"amount","nameLocation":"7263:6:11","nodeType":"VariableDeclaration","scope":3992,"src":"7255:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3943,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7237:33:11"},"returnParameters":{"id":3946,"nodeType":"ParameterList","parameters":[],"src":"7288:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4036,"nodeType":"FunctionDefinition","src":"7610:296:11","nodes":[],"body":{"id":4035,"nodeType":"Block","src":"7693:213:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4001,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7707:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7724:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7716:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4002,"name":"address","nodeType":"ElementaryTypeName","src":"7716:7:11","typeDescriptions":{}}},"id":4005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7707:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4010,"nodeType":"IfStatement","src":"7703:45:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4007,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7735:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7735:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4009,"nodeType":"RevertStatement","src":"7728:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4011,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7762:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7781:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7773:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4012,"name":"address","nodeType":"ElementaryTypeName","src":"7773:7:11","typeDescriptions":{}}},"id":4015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7773:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7762:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4020,"nodeType":"IfStatement","src":"7758:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4017,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7792:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7792:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4019,"nodeType":"RevertStatement","src":"7785:20:11"}},{"expression":{"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4021,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"7816:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":4024,"indexExpression":{"id":4022,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7828:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7816:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4025,"indexExpression":{"id":4023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7835:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7816:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4026,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7846:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7816:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4028,"nodeType":"ExpressionStatement","src":"7816:36:11"},{"eventCall":{"arguments":[{"id":4030,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7876:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4031,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7883:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7892:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4029,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4861,"src":"7867:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":4033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7867:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4034,"nodeType":"EmitStatement","src":"7862:37:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7619:8:11","parameters":{"id":3999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3994,"mutability":"mutable","name":"owner","nameLocation":"7636:5:11","nodeType":"VariableDeclaration","scope":4036,"src":"7628:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3993,"name":"address","nodeType":"ElementaryTypeName","src":"7628:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"spender","nameLocation":"7651:7:11","nodeType":"VariableDeclaration","scope":4036,"src":"7643:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3995,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3998,"mutability":"mutable","name":"amount","nameLocation":"7668:6:11","nodeType":"VariableDeclaration","scope":4036,"src":"7660:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3997,"name":"uint256","nodeType":"ElementaryTypeName","src":"7660:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7627:48:11"},"returnParameters":{"id":4000,"nodeType":"ParameterList","parameters":[],"src":"7693:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4082,"nodeType":"FunctionDefinition","src":"8150:396:11","nodes":[],"body":{"id":4081,"nodeType":"Block","src":"8228:318:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4047,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8255:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8259:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8255:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4049,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8269:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8255:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4051,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8296:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8300:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8296:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4053,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8310:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8296:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:78:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8353:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8357:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8353:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4058,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"8367:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8353:28:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:126:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4064,"nodeType":"IfStatement","src":"8238:176:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4061,"name":"InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3471,"src":"8399:13:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8399:15:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4063,"nodeType":"RevertStatement","src":"8392:22:11"}},{"expression":{"arguments":[{"id":4066,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8430:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4067,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8434:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4065,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"8424:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:17:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4069,"nodeType":"ExpressionStatement","src":"8424:17:11"},{"eventCall":{"arguments":[{"arguments":[{"id":4073,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8481:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4071,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8464:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8468:12:11","memberName":"encodePacked","nodeType":"MemberAccess","src":"8464:16:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8464:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4075,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8507:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8511:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4070,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"8456:7:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes memory,address,uint256)"}},"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8456:62:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4078,"nodeType":"EmitStatement","src":"8451:67:11"},{"expression":{"hexValue":"74727565","id":4079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8535:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4046,"id":4080,"nodeType":"Return","src":"8528:11:11"}]},"baseFunctions":[4770],"documentation":{"id":4037,"nodeType":"StructuredDocumentation","src":"7912:233:11","text":" @dev Deposits corresponding tokens from external chain, only callable by Fungible module.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"47e7ef24","implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"8159:7:11","overrides":{"id":4043,"nodeType":"OverrideSpecifier","overrides":[],"src":"8204:8:11"},"parameters":{"id":4042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4039,"mutability":"mutable","name":"to","nameLocation":"8175:2:11","nodeType":"VariableDeclaration","scope":4082,"src":"8167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4038,"name":"address","nodeType":"ElementaryTypeName","src":"8167:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4041,"mutability":"mutable","name":"amount","nameLocation":"8187:6:11","nodeType":"VariableDeclaration","scope":4082,"src":"8179:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4040,"name":"uint256","nodeType":"ElementaryTypeName","src":"8179:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8166:28:11"},"returnParameters":{"id":4046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4082,"src":"8222:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4044,"name":"bool","nodeType":"ElementaryTypeName","src":"8222:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8221:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4140,"nodeType":"FunctionDefinition","src":"8731:498:11","nodes":[],"body":{"id":4139,"nodeType":"Block","src":"8805:424:11","nodes":[],"statements":[{"assignments":[4092],"declarations":[{"constant":false,"id":4092,"mutability":"mutable","name":"gasZRC20","nameLocation":"8823:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8815:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"8815:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4099,"initialValue":{"arguments":[{"id":4097,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"8889:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4094,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8842:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4093,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8834:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8867:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"8834:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8815:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4100,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"8912:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8924:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4101,"name":"address","nodeType":"ElementaryTypeName","src":"8924:7:11","typeDescriptions":{}}},"id":4104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8924:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8912:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4109,"nodeType":"IfStatement","src":"8908:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4106,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"8943:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8943:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4108,"nodeType":"RevertStatement","src":"8936:20:11"}},{"assignments":[4111],"declarations":[{"constant":false,"id":4111,"mutability":"mutable","name":"gasPrice","nameLocation":"8975:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8967:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4110,"name":"uint256","nodeType":"ElementaryTypeName","src":"8967:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4118,"initialValue":{"arguments":[{"id":4116,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9037:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4113,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8994:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4112,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8986:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9019:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"8986:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8967:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9060:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9072:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9060:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4126,"nodeType":"IfStatement","src":"9056:65:11","trueBody":{"id":4125,"nodeType":"Block","src":"9075:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4122,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9096:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9096:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4124,"nodeType":"RevertStatement","src":"9089:21:11"}]}},{"assignments":[4128],"declarations":[{"constant":false,"id":4128,"mutability":"mutable","name":"gasFee","nameLocation":"9138:6:11","nodeType":"VariableDeclaration","scope":4139,"src":"9130:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4127,"name":"uint256","nodeType":"ElementaryTypeName","src":"9130:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4134,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4129,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9147:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4130,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"9158:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4132,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9170:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:40:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9130:57:11"},{"expression":{"components":[{"id":4135,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"9205:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4136,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"9215:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4137,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9204:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4090,"id":4138,"nodeType":"Return","src":"9197:25:11"}]},"baseFunctions":[4793],"documentation":{"id":4083,"nodeType":"StructuredDocumentation","src":"8552:174:11","text":" @dev Withdraws gas fees.\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"d9eeebed","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFee","nameLocation":"8740:14:11","overrides":{"id":4085,"nodeType":"OverrideSpecifier","overrides":[],"src":"8769:8:11"},"parameters":{"id":4084,"nodeType":"ParameterList","parameters":[],"src":"8754:2:11"},"returnParameters":{"id":4090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8787:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4086,"name":"address","nodeType":"ElementaryTypeName","src":"8787:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8796:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8796:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8786:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4200,"nodeType":"FunctionDefinition","src":"9437:525:11","nodes":[],"body":{"id":4199,"nodeType":"Block","src":"9539:423:11","nodes":[],"statements":[{"assignments":[4152],"declarations":[{"constant":false,"id":4152,"mutability":"mutable","name":"gasZRC20","nameLocation":"9557:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9549:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4151,"name":"address","nodeType":"ElementaryTypeName","src":"9549:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4159,"initialValue":{"arguments":[{"id":4157,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9623:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4154,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9576:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4153,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9568:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9601:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"9568:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9549:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4160,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9646:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9666:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9658:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4161,"name":"address","nodeType":"ElementaryTypeName","src":"9658:7:11","typeDescriptions":{}}},"id":4164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9658:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9646:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4169,"nodeType":"IfStatement","src":"9642:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4166,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"9677:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4168,"nodeType":"RevertStatement","src":"9670:20:11"}},{"assignments":[4171],"declarations":[{"constant":false,"id":4171,"mutability":"mutable","name":"gasPrice","nameLocation":"9709:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9701:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"9701:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4178,"initialValue":{"arguments":[{"id":4176,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9771:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4173,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9728:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4172,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9720:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9753:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"9720:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9701:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4179,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9794:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9806:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9794:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4186,"nodeType":"IfStatement","src":"9790:65:11","trueBody":{"id":4185,"nodeType":"Block","src":"9809:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4182,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9830:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9830:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4184,"nodeType":"RevertStatement","src":"9823:21:11"}]}},{"assignments":[4188],"declarations":[{"constant":false,"id":4188,"mutability":"mutable","name":"gasFee","nameLocation":"9872:6:11","nodeType":"VariableDeclaration","scope":4199,"src":"9864:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4187,"name":"uint256","nodeType":"ElementaryTypeName","src":"9864:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4194,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4189,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9881:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4190,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4143,"src":"9892:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4192,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9903:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:39:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9864:56:11"},{"expression":{"components":[{"id":4195,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9938:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4196,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"9948:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9937:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4150,"id":4198,"nodeType":"Return","src":"9930:25:11"}]},"baseFunctions":[4802],"documentation":{"id":4141,"nodeType":"StructuredDocumentation","src":"9235:197:11","text":" @dev Withdraws gas fees with specified gasLimit\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"fc5fecd5","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFeeWithGasLimit","nameLocation":"9446:26:11","overrides":{"id":4145,"nodeType":"OverrideSpecifier","overrides":[],"src":"9503:8:11"},"parameters":{"id":4144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"mutability":"mutable","name":"gasLimit","nameLocation":"9481:8:11","nodeType":"VariableDeclaration","scope":4200,"src":"9473:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4142,"name":"uint256","nodeType":"ElementaryTypeName","src":"9473:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9472:18:11"},"returnParameters":{"id":4150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9521:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4146,"name":"address","nodeType":"ElementaryTypeName","src":"9521:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9530:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4148,"name":"uint256","nodeType":"ElementaryTypeName","src":"9530:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9520:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4251,"nodeType":"FunctionDefinition","src":"10352:430:11","nodes":[],"body":{"id":4250,"nodeType":"Block","src":"10436:346:11","nodes":[],"statements":[{"assignments":[4212,4214],"declarations":[{"constant":false,"id":4212,"mutability":"mutable","name":"gasZRC20","nameLocation":"10455:8:11","nodeType":"VariableDeclaration","scope":4250,"src":"10447:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4211,"name":"address","nodeType":"ElementaryTypeName","src":"10447:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4214,"mutability":"mutable","name":"gasFee","nameLocation":"10473:6:11","nodeType":"VariableDeclaration","scope":4250,"src":"10465:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4213,"name":"uint256","nodeType":"ElementaryTypeName","src":"10465:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":4215,"name":"withdrawGasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4140,"src":"10483:14:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint256_$","typeString":"function () view returns (address,uint256)"}},"id":4216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10483:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10446:53:11"},{"condition":{"id":4227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10513:75:11","subExpression":{"arguments":[{"expression":{"id":4222,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10544:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10548:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10544:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4224,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"10556:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4225,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10581:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4219,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4212,"src":"10521:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4218,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10514:6:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":4221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10531:12:11","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"10514:29:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":4226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:74:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4232,"nodeType":"IfStatement","src":"10509:135:11","trueBody":{"id":4231,"nodeType":"Block","src":"10590:54:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4228,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3473,"src":"10611:20:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10611:22:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4230,"nodeType":"RevertStatement","src":"10604:29:11"}]}},{"expression":{"arguments":[{"expression":{"id":4234,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10659:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10663:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10659:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4236,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10671:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4233,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"10653:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10653:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4238,"nodeType":"ExpressionStatement","src":"10653:25:11"},{"eventCall":{"arguments":[{"expression":{"id":4240,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10704:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10708:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10704:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4242,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"10716:2:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4243,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10720:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4244,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10728:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4245,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"10736:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4239,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"10693:10:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,bytes memory,uint256,uint256,uint256)"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:61:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4247,"nodeType":"EmitStatement","src":"10688:66:11"},{"expression":{"hexValue":"74727565","id":4248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10771:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4210,"id":4249,"nodeType":"Return","src":"10764:11:11"}]},"baseFunctions":[4786],"documentation":{"id":4201,"nodeType":"StructuredDocumentation","src":"9968:379:11","text":" @dev Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the\n outbound chain\n this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"c7012626","implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"10361:8:11","overrides":{"id":4207,"nodeType":"OverrideSpecifier","overrides":[],"src":"10412:8:11"},"parameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4203,"mutability":"mutable","name":"to","nameLocation":"10383:2:11","nodeType":"VariableDeclaration","scope":4251,"src":"10370:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4202,"name":"bytes","nodeType":"ElementaryTypeName","src":"10370:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"amount","nameLocation":"10395:6:11","nodeType":"VariableDeclaration","scope":4251,"src":"10387:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4204,"name":"uint256","nodeType":"ElementaryTypeName","src":"10387:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10369:33:11"},"returnParameters":{"id":4210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4251,"src":"10430:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4208,"name":"bool","nodeType":"ElementaryTypeName","src":"10430:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10429:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4278,"nodeType":"FunctionDefinition","src":"10942:216:11","nodes":[],"body":{"id":4277,"nodeType":"Block","src":"11015:143:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4259,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11029:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11045:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11037:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4260,"name":"address","nodeType":"ElementaryTypeName","src":"11037:7:11","typeDescriptions":{}}},"id":4263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11037:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11029:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4268,"nodeType":"IfStatement","src":"11025:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4265,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11056:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11056:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4267,"nodeType":"RevertStatement","src":"11049:20:11"}},{"expression":{"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4269,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"11079:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4270,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11105:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11079:30:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4272,"nodeType":"ExpressionStatement","src":"11079:30:11"},{"eventCall":{"arguments":[{"id":4274,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11146:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4273,"name":"UpdatedSystemContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4885,"src":"11124:21:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11124:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4276,"nodeType":"EmitStatement","src":"11119:32:11"}]},"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"10788:149:11","text":" @dev Updates system contract address. Can only be updated by the fungible module.\n @param addr, new system contract address."},"functionSelector":"c835d7cc","implemented":true,"kind":"function","modifiers":[{"id":4257,"kind":"modifierInvocation","modifierName":{"id":4256,"name":"onlyFungible","nameLocations":["11002:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11002:12:11"},"nodeType":"ModifierInvocation","src":"11002:12:11"}],"name":"updateSystemContractAddress","nameLocation":"10951:27:11","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"addr","nameLocation":"10987:4:11","nodeType":"VariableDeclaration","scope":4278,"src":"10979:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4253,"name":"address","nodeType":"ElementaryTypeName","src":"10979:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10978:14:11"},"returnParameters":{"id":4258,"nodeType":"ParameterList","parameters":[],"src":"11015:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4305,"nodeType":"FunctionDefinition","src":"11320:193:11","nodes":[],"body":{"id":4304,"nodeType":"Block","src":"11386:127:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4286,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11400:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11416:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11408:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4287,"name":"address","nodeType":"ElementaryTypeName","src":"11408:7:11","typeDescriptions":{}}},"id":4290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11408:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11400:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4295,"nodeType":"IfStatement","src":"11396:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4292,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11427:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11427:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4294,"nodeType":"RevertStatement","src":"11420:20:11"}},{"expression":{"id":4298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4296,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"11450:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4297,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11467:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11450:21:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4299,"nodeType":"ExpressionStatement","src":"11450:21:11"},{"eventCall":{"arguments":[{"id":4301,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11501:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4300,"name":"UpdatedGateway","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4889,"src":"11486:14:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11486:20:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4303,"nodeType":"EmitStatement","src":"11481:25:11"}]},"documentation":{"id":4279,"nodeType":"StructuredDocumentation","src":"11164:151:11","text":" @dev Updates gateway contract address. Can only be updated by the fungible module.\n @param addr, new gateway contract address."},"functionSelector":"ccc77599","implemented":true,"kind":"function","modifiers":[{"id":4284,"kind":"modifierInvocation","modifierName":{"id":4283,"name":"onlyFungible","nameLocations":["11373:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11373:12:11"},"nodeType":"ModifierInvocation","src":"11373:12:11"}],"name":"updateGatewayAddress","nameLocation":"11329:20:11","parameters":{"id":4282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4281,"mutability":"mutable","name":"addr","nameLocation":"11358:4:11","nodeType":"VariableDeclaration","scope":4305,"src":"11350:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4280,"name":"address","nodeType":"ElementaryTypeName","src":"11350:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11349:14:11"},"returnParameters":{"id":4285,"nodeType":"ParameterList","parameters":[],"src":"11386:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4322,"nodeType":"FunctionDefinition","src":"11650:144:11","nodes":[],"body":{"id":4321,"nodeType":"Block","src":"11715:79:11","nodes":[],"statements":[{"expression":{"id":4315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4313,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11725:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4314,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4308,"src":"11737:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11725:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4316,"nodeType":"ExpressionStatement","src":"11725:21:11"},{"eventCall":{"arguments":[{"id":4318,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11777:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4317,"name":"UpdatedGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"11761:15:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11761:26:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4320,"nodeType":"EmitStatement","src":"11756:31:11"}]},"documentation":{"id":4306,"nodeType":"StructuredDocumentation","src":"11519:126:11","text":" @dev Updates gas limit. Can only be updated by the fungible module.\n @param gasLimit_, new gas limit."},"functionSelector":"f687d12a","implemented":true,"kind":"function","modifiers":[{"id":4311,"kind":"modifierInvocation","modifierName":{"id":4310,"name":"onlyFungible","nameLocations":["11702:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11702:12:11"},"nodeType":"ModifierInvocation","src":"11702:12:11"}],"name":"updateGasLimit","nameLocation":"11659:14:11","parameters":{"id":4309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4308,"mutability":"mutable","name":"gasLimit_","nameLocation":"11682:9:11","nodeType":"VariableDeclaration","scope":4322,"src":"11674:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4307,"name":"uint256","nodeType":"ElementaryTypeName","src":"11674:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11673:19:11"},"returnParameters":{"id":4312,"nodeType":"ParameterList","parameters":[],"src":"11715:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4339,"nodeType":"FunctionDefinition","src":"11954:188:11","nodes":[],"body":{"id":4338,"nodeType":"Block","src":"12033:109:11","nodes":[],"statements":[{"expression":{"id":4332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4330,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12043:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4331,"name":"protocolFlatFee_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"12063:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12043:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4333,"nodeType":"ExpressionStatement","src":"12043:36:11"},{"eventCall":{"arguments":[{"id":4335,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12117:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4334,"name":"UpdatedProtocolFlatFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"12094:22:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12094:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4337,"nodeType":"EmitStatement","src":"12089:46:11"}]},"documentation":{"id":4323,"nodeType":"StructuredDocumentation","src":"11800:149:11","text":" @dev Updates protocol flat fee. Can only be updated by the fungible module.\n @param protocolFlatFee_, new protocol flat fee."},"functionSelector":"eddeb123","implemented":true,"kind":"function","modifiers":[{"id":4328,"kind":"modifierInvocation","modifierName":{"id":4327,"name":"onlyFungible","nameLocations":["12020:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"12020:12:11"},"nodeType":"ModifierInvocation","src":"12020:12:11"}],"name":"updateProtocolFlatFee","nameLocation":"11963:21:11","parameters":{"id":4326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4325,"mutability":"mutable","name":"protocolFlatFee_","nameLocation":"11993:16:11","nodeType":"VariableDeclaration","scope":4339,"src":"11985:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4324,"name":"uint256","nodeType":"ElementaryTypeName","src":"11985:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11984:26:11"},"returnParameters":{"id":4329,"nodeType":"ParameterList","parameters":[],"src":"12033:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":3485,"name":"IZRC20Metadata","nameLocations":["722:14:11"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"722:14:11"},"id":3486,"nodeType":"InheritanceSpecifier","src":"722:14:11"},{"baseName":{"id":3487,"name":"ZRC20Errors","nameLocations":["738:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":3484,"src":"738:11:11"},"id":3488,"nodeType":"InheritanceSpecifier","src":"738:11:11"},{"baseName":{"id":3489,"name":"ZRC20Events","nameLocations":["751:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":4898,"src":"751:11:11"},"id":3490,"nodeType":"InheritanceSpecifier","src":"751:11:11"}],"canonicalName":"ZRC20","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[4340,4898,3484,4844,4825],"name":"ZRC20","nameLocation":"713:5:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[4853,4861,4869,4881,4885,4889,4893,4897]}],"license":"MIT"},"id":11} \ No newline at end of file diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index 8d8e5c96..a23f3390 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -17,3 +17,4 @@ export { evmDeposit } from "./evmDeposit"; export { evmDepositAndCall } from "./evmDepositAndCall"; export { zetachainCall } from "./zetachainCall"; export { zetachainWithdraw } from "./zetachainWithdraw"; +export { zetachainWithdrawAndCall } from "./zetachainWithdrawAndCall"; diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index e1ebdb53..cd8d7eac 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -1,7 +1,7 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; -import ZRC20ABI from "@zetachain/protocol-contracts/abi/zevm/ZRC20.sol/ZRC20.json"; +import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; export const zetachainCall = async ( args: any, @@ -108,7 +108,7 @@ task("zetachain-call", "Call a contract on a connected chain", zetachainCall) 7000000, types.int ) + .addParam("amount", "The amount of tokens to pay for gas") .addParam("function", "Function to call (example: 'hello(string)')") .addParam("types", "The types of the parameters (example: ['string'])") - .addParam("amount", "The amount of tokens to pay for gas") .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts index 7c388b77..29212ccd 100644 --- a/packages/tasks/src/zetachainWithdraw.ts +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -1,7 +1,7 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; -import ZRC20ABI from "@zetachain/protocol-contracts/abi/zevm/ZRC20.sol/ZRC20.json"; +import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; export const zetachainWithdraw = async ( args: any, diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts new file mode 100644 index 00000000..0e546472 --- /dev/null +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -0,0 +1,136 @@ +import { task, types } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; + +export const zetachainWithdrawAndCall = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const [signer] = await hre.ethers.getSigners(); + const { utils } = hre.ethers; + + const gateway = new hre.ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + revertAddress: args.revertAddress, + callOnRevert: args.callOnRevert, + abortAddress: "0x0000000000000000000000000000000000000000", // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + onRevertGasLimit: args.onRevertGasLimit, + }; + + const txOptions = { + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + }; + + const functionSignature = utils.id(args.function).slice(0, 10); + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + const message = utils.hexlify( + utils.concat([functionSignature, encodedParameters]) + ); + + try { + const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const decimals = await zrc20.decimals(); + const value = utils.parseUnits(args.amount, decimals); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFee(); + if (args.zrc20 === gasZRC20) { + const approveGasAndWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value.add(gasFee), + txOptions + ); + await approveGasAndWithdraw.wait(); + } else { + const gasZRC20Contract = new hre.ethers.Contract( + gasZRC20, + ZRC20ABI.abi, + signer + ); + const approveGas = await gasZRC20Contract.approve( + args.gatewayZetaChain, + utils.parseUnits("1000", 18), + // gasFee, + txOptions + ); + await approveGas.wait(); + const approveWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value, + txOptions + ); + await approveWithdraw.wait(); + } + const method = + "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))"; + const tx = await gateway[method]( + utils.hexlify(args.receiver), + value, + args.zrc20, + message, + args.gasLimit, + revertOptions, + txOptions + ); + + const receipt = await tx.wait(); + console.log("Transaction hash:", receipt.transactionHash); + } catch (e) { + console.error("Transaction error:", e); + } +}; + +task( + "zetachain-withdraw-and-call", + "Withdraw tokens from ZetaChain and call a contract", + zetachainWithdrawAndCall +) + .addOptionalParam( + "gatewayZetaChain", + "contract address of gateway on ZetaChain", + "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + ) + .addOptionalParam("zrc20", "The address of the ZRC20 token") + .addFlag("callOnRevert", "Whether to call on revert") + .addOptionalParam( + "revertAddress", + "Revert address", + "0x0000000000000000000000000000000000000000" + ) + .addOptionalParam( + "gasPrice", + "The gas price for the transaction", + 10000000000, + types.int + ) + .addOptionalParam( + "gasLimit", + "The gas limit for the transaction", + 7000000, + types.int + ) + .addOptionalParam("revertMessage", "Revert message", "0x") + .addParam( + "receiver", + "The address of the receiver contract on a connected chain" + ) + .addOptionalParam( + "onRevertGasLimit", + "The gas limit for the revert transaction", + 7000000, + types.int + ) + .addParam("amount", "The amount of tokens to send") + .addParam("function", "Function to call (example: 'hello(string)')") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); From 03ade9d5c39e5fe988623993a7c85f6efc8caebe Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 13:07:01 +0900 Subject: [PATCH 03/18] fix withdraw and call --- packages/tasks/src/zetachainCall.ts | 3 ++- packages/tasks/src/zetachainWithdrawAndCall.ts | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index cd8d7eac..33d99002 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -42,9 +42,10 @@ export const zetachainCall = async ( try { const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const decimals = await zrc20.decimals(); const approve = await zrc20.approve( args.gatewayZetaChain, - utils.parseUnits(args.amount, 18), + utils.parseUnits(args.amount, decimals), txOptions ); await approve.wait(); diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts index 0e546472..ad5f8150 100644 --- a/packages/tasks/src/zetachainWithdrawAndCall.ts +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -43,7 +43,9 @@ export const zetachainWithdrawAndCall = async ( const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); const decimals = await zrc20.decimals(); const value = utils.parseUnits(args.amount, decimals); - const [gasZRC20, gasFee] = await zrc20.withdrawGasFee(); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( + args.gasLimit + ); if (args.zrc20 === gasZRC20) { const approveGasAndWithdraw = await zrc20.approve( args.gatewayZetaChain, @@ -59,8 +61,8 @@ export const zetachainWithdrawAndCall = async ( ); const approveGas = await gasZRC20Contract.approve( args.gatewayZetaChain, - utils.parseUnits("1000", 18), - // gasFee, + // utils.parseUnits("1000", 18), + gasFee, txOptions ); await approveGas.wait(); From 39bce32ee19dc0262d9c839b3b1d8673216dc92a Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 13:07:12 +0900 Subject: [PATCH 04/18] remove comment --- packages/tasks/src/zetachainWithdrawAndCall.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts index ad5f8150..6985e463 100644 --- a/packages/tasks/src/zetachainWithdrawAndCall.ts +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -61,7 +61,6 @@ export const zetachainWithdrawAndCall = async ( ); const approveGas = await gasZRC20Contract.approve( args.gatewayZetaChain, - // utils.parseUnits("1000", 18), gasFee, txOptions ); From 34adb754349f0cc5ed7771e759a2358fdb03fc22 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 15:41:31 +0900 Subject: [PATCH 05/18] wip --- packages/tasks/src/zetachainCall.ts | 16 +++++++++++----- packages/tasks/src/zetachainWithdraw.ts | 4 +++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index 33d99002..414dd01d 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -42,10 +42,17 @@ export const zetachainCall = async ( try { const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); - const decimals = await zrc20.decimals(); - const approve = await zrc20.approve( + const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( + args.gasLimit + ); + const gasZRC20Contract = new hre.ethers.Contract( + gasZRC20, + ZRC20ABI.abi, + signer + ); + const approve = await gasZRC20Contract.approve( args.gatewayZetaChain, - utils.parseUnits(args.amount, decimals), + gasFee, txOptions ); await approve.wait(); @@ -53,7 +60,7 @@ export const zetachainCall = async ( "call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))" ]( utils.hexlify(args.receiver), - args.zrc20, + gasZRC20, message, args.callGasLimit, revertOptions, @@ -109,7 +116,6 @@ task("zetachain-call", "Call a contract on a connected chain", zetachainCall) 7000000, types.int ) - .addParam("amount", "The amount of tokens to pay for gas") .addParam("function", "Function to call (example: 'hello(string)')") .addParam("types", "The types of the parameters (example: ['string'])") .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts index 29212ccd..ca248d00 100644 --- a/packages/tasks/src/zetachainWithdraw.ts +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -33,7 +33,9 @@ export const zetachainWithdraw = async ( const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); const decimals = await zrc20.decimals(); const value = utils.parseUnits(args.amount, decimals); - const [gasZRC20, gasFee] = await zrc20.withdrawGasFee(); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( + args.gasLimit + ); if (args.zrc20 === gasZRC20) { const approveGasAndWithdraw = await zrc20.approve( args.gatewayZetaChain, From fc1d8c1edfe63856ea4e70273ae0b5c63a71b66c Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 16:32:14 +0900 Subject: [PATCH 06/18] solana deposit --- package.json | 2 + packages/client/src/client.ts | 2 + packages/client/src/idl/gateway.json | 497 +++++++++++++++++++++++++++ packages/client/src/index.ts | 1 + packages/client/src/solanaDeposit.ts | 97 ++++++ packages/tasks/src/index.ts | 1 + packages/tasks/src/solanaDeposit.ts | 18 + yarn.lock | 391 ++++++++++++++++++--- 8 files changed, 969 insertions(+), 40 deletions(-) create mode 100644 packages/client/src/idl/gateway.json create mode 100644 packages/client/src/solanaDeposit.ts create mode 100644 packages/tasks/src/solanaDeposit.ts diff --git a/package.json b/package.json index fc3ab9ab..cc3044a6 100644 --- a/package.json +++ b/package.json @@ -87,10 +87,12 @@ "typechain-types" ], "dependencies": { + "@coral-xyz/anchor": "^0.30.1", "@inquirer/prompts": "^2.1.1", "@inquirer/select": "1.1.3", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^4.9.6", + "@solana/web3.js": "^1.95.3", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@zetachain/faucet-cli": "^4.1.1", "@zetachain/networks": "^10.0.0", diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 9562cdd7..f9e7bb61 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -19,6 +19,7 @@ import { sendZeta, trackCCTX, withdraw, + solanaDeposit, } from "."; export interface ZetaChainClientParamsBase { @@ -126,4 +127,5 @@ export class ZetaChainClient { getRefundFee = getRefundFee; getZRC20FromERC20 = getZRC20FromERC20; getZRC20GasToken = getZRC20GasToken; + solanaDeposit = solanaDeposit; } diff --git a/packages/client/src/idl/gateway.json b/packages/client/src/idl/gateway.json new file mode 100644 index 00000000..d5f677ae --- /dev/null +++ b/packages/client/src/idl/gateway.json @@ -0,0 +1,497 @@ +{ + "address": "ZETAjseVjuFsxdRxo6MmTCvqFwb3ZHUx56Co3vCmGis", + "metadata": { + "name": "gateway", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, + "instructions": [ + { + "name": "deposit", + "discriminator": [ + 242, + 35, + 198, + 137, + 82, + 225, + 242, + 182 + ], + "accounts": [ + { + "name": "signer", + "writable": true, + "signer": true + }, + { + "name": "pda", + "writable": true + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "memo", + "type": "bytes" + } + ] + }, + { + "name": "deposit_spl_token", + "discriminator": [ + 86, + 172, + 212, + 121, + 63, + 233, + 96, + 144 + ], + "accounts": [ + { + "name": "signer", + "writable": true, + "signer": true + }, + { + "name": "pda", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 109, + 101, + 116, + 97 + ] + } + ] + } + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + }, + { + "name": "from", + "writable": true + }, + { + "name": "to", + "writable": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "memo", + "type": "bytes" + } + ] + }, + { + "name": "initialize", + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], + "accounts": [ + { + "name": "signer", + "writable": true, + "signer": true + }, + { + "name": "pda", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 109, + 101, + 116, + 97 + ] + } + ] + } + }, + { + "name": "system_program", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "tss_address", + "type": { + "array": [ + "u8", + 20 + ] + } + }, + { + "name": "chain_id", + "type": "u64" + } + ] + }, + { + "name": "set_deposit_paused", + "discriminator": [ + 98, + 179, + 141, + 24, + 246, + 120, + 164, + 143 + ], + "accounts": [ + { + "name": "pda", + "writable": true + }, + { + "name": "signer", + "writable": true, + "signer": true + } + ], + "args": [ + { + "name": "deposit_paused", + "type": "bool" + } + ] + }, + { + "name": "update_authority", + "discriminator": [ + 32, + 46, + 64, + 28, + 149, + 75, + 243, + 88 + ], + "accounts": [ + { + "name": "pda", + "writable": true + }, + { + "name": "signer", + "writable": true, + "signer": true + } + ], + "args": [ + { + "name": "new_authority_address", + "type": "pubkey" + } + ] + }, + { + "name": "update_tss", + "discriminator": [ + 227, + 136, + 3, + 242, + 177, + 168, + 10, + 160 + ], + "accounts": [ + { + "name": "pda", + "writable": true + }, + { + "name": "signer", + "writable": true, + "signer": true + } + ], + "args": [ + { + "name": "tss_address", + "type": { + "array": [ + "u8", + 20 + ] + } + } + ] + }, + { + "name": "withdraw", + "discriminator": [ + 183, + 18, + 70, + 156, + 148, + 109, + 161, + 34 + ], + "accounts": [ + { + "name": "signer", + "writable": true, + "signer": true + }, + { + "name": "pda", + "writable": true + }, + { + "name": "to", + "writable": true + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "signature", + "type": { + "array": [ + "u8", + 64 + ] + } + }, + { + "name": "recovery_id", + "type": "u8" + }, + { + "name": "message_hash", + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "nonce", + "type": "u64" + } + ] + }, + { + "name": "withdraw_spl_token", + "discriminator": [ + 219, + 156, + 234, + 11, + 89, + 235, + 246, + 32 + ], + "accounts": [ + { + "name": "signer", + "writable": true, + "signer": true + }, + { + "name": "pda", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 109, + 101, + 116, + 97 + ] + } + ] + } + }, + { + "name": "from", + "writable": true + }, + { + "name": "to", + "writable": true + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" + }, + { + "name": "signature", + "type": { + "array": [ + "u8", + 64 + ] + } + }, + { + "name": "recovery_id", + "type": "u8" + }, + { + "name": "message_hash", + "type": { + "array": [ + "u8", + 32 + ] + } + }, + { + "name": "nonce", + "type": "u64" + } + ] + } + ], + "accounts": [ + { + "name": "Pda", + "discriminator": [ + 169, + 245, + 0, + 205, + 225, + 36, + 43, + 94 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "SignerIsNotAuthority", + "msg": "SignerIsNotAuthority" + }, + { + "code": 6001, + "name": "InsufficientPoints", + "msg": "InsufficientPoints" + }, + { + "code": 6002, + "name": "NonceMismatch", + "msg": "NonceMismatch" + }, + { + "code": 6003, + "name": "TSSAuthenticationFailed", + "msg": "TSSAuthenticationFailed" + }, + { + "code": 6004, + "name": "DepositToAddressMismatch", + "msg": "DepositToAddressMismatch" + }, + { + "code": 6005, + "name": "MessageHashMismatch", + "msg": "MessageHashMismatch" + }, + { + "code": 6006, + "name": "MemoLengthExceeded", + "msg": "MemoLengthExceeded" + }, + { + "code": 6007, + "name": "MemoLengthTooShort", + "msg": "MemoLengthTooShort" + }, + { + "code": 6008, + "name": "DepositPaused", + "msg": "DepositPaused" + } + ], + "types": [ + { + "name": "Pda", + "type": { + "kind": "struct", + "fields": [ + { + "name": "nonce", + "type": "u64" + }, + { + "name": "tss_address", + "type": { + "array": [ + "u8", + 20 + ] + } + }, + { + "name": "authority", + "type": "pubkey" + }, + { + "name": "chain_id", + "type": "u64" + }, + { + "name": "deposit_paused", + "type": "bool" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 33a8e191..3f510f06 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -13,3 +13,4 @@ export * from "./prepareData"; export * from "./sendZeta"; export * from "./trackCCTX"; export * from "./withdraw"; +export * from "./solanaDeposit"; diff --git a/packages/client/src/solanaDeposit.ts b/packages/client/src/solanaDeposit.ts new file mode 100644 index 00000000..b7128ba2 --- /dev/null +++ b/packages/client/src/solanaDeposit.ts @@ -0,0 +1,97 @@ +import * as anchor from "@coral-xyz/anchor"; +import Gateway_IDL from "./idl/gateway.json"; +import { ZetaChainClient } from "./client"; +import { Keypair } from "@solana/web3.js"; + +const SEED = "meta"; + +const getKeypairFromFile = async (filepath: string) => { + const path = await import("path"); + if (filepath[0] === "~") { + const home = process.env.HOME || null; + if (home) { + filepath = path.join(home, filepath.slice(1)); + } + } + // Get contents of file + let fileContents; + try { + const { readFile } = await import("fs/promises"); + const fileContentsBuffer = await readFile(filepath); + fileContents = fileContentsBuffer.toString(); + } catch (error) { + throw new Error(`Could not read keypair from file at '${filepath}'`); + } + // Parse contents of file + let parsedFileContents; + try { + parsedFileContents = Uint8Array.from(JSON.parse(fileContents)); + } catch (thrownObject) { + const error: any = thrownObject; + if (!error.message.includes("Unexpected token")) { + throw error; + } + throw new Error(`Invalid secret key file at '${filepath}'!`); + } + return Keypair.fromSecretKey(parsedFileContents); +}; + +export const solanaDeposit = async function ( + this: ZetaChainClient, + args: { + amount: number; + memo: string; + api: string; + idPath: string; + } +) { + const keypair = await getKeypairFromFile(args.idPath); + const wallet = new anchor.Wallet(keypair); + + const connection = new anchor.web3.Connection(args.api); + const provider = new anchor.AnchorProvider( + connection, + wallet, + anchor.AnchorProvider.defaultOptions() + ); + anchor.setProvider(provider); + + const programId = new anchor.web3.PublicKey(Gateway_IDL.address); + const gatewayProgram = new anchor.Program( + Gateway_IDL as anchor.Idl, + provider + ); + + const seeds = [Buffer.from(SEED, "utf-8")]; + const [pdaAccount] = anchor.web3.PublicKey.findProgramAddressSync( + seeds, + programId + ); + + const depositAmount = new anchor.BN( + anchor.web3.LAMPORTS_PER_SOL * args.amount + ); + const memo = Buffer.from(args.memo); + + try { + const tx = await gatewayProgram.methods + .deposit(depositAmount, memo) + .accounts({ + signer: wallet.publicKey, + pda: pdaAccount, + systemProgram: anchor.web3.SystemProgram.programId, + }) + .rpc(); + + console.log("Deposit transaction signature:", tx); + + const pdaBalance = await connection.getBalance(pdaAccount); + console.log( + "PDA account SOL balance:", + pdaBalance / anchor.web3.LAMPORTS_PER_SOL, + "SOL" + ); + } catch (error) { + console.error("Transaction failed:", error); + } +}; diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index a23f3390..b3c05928 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -18,3 +18,4 @@ export { evmDepositAndCall } from "./evmDepositAndCall"; export { zetachainCall } from "./zetachainCall"; export { zetachainWithdraw } from "./zetachainWithdraw"; export { zetachainWithdrawAndCall } from "./zetachainWithdrawAndCall"; +export { solanaDeposit } from "./solanaDeposit"; diff --git a/packages/tasks/src/solanaDeposit.ts b/packages/tasks/src/solanaDeposit.ts new file mode 100644 index 00000000..b2a910a8 --- /dev/null +++ b/packages/tasks/src/solanaDeposit.ts @@ -0,0 +1,18 @@ +import { task } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import { ZetaChainClient } from "../../client/src"; + +export const solanaDeposit = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const { amount, memo, api, idPath } = args; + const client = new ZetaChainClient({ network: "testnet" }); + await client.solanaDeposit({ amount, memo, api, idPath }); +}; + +task("solana-deposit", "Solana deposit", solanaDeposit) + .addParam("amount", "Amount of SOL to deposit") + .addParam("memo", "Memo") + .addOptionalParam("api", "Solana API", "https://api.devnet.solana.com") + .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json"); diff --git a/yarn.lock b/yarn.lock index 15726516..9537ee47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,6 +25,47 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/runtime@^7.25.0": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@coral-xyz/anchor-errors@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz#bdfd3a353131345244546876eb4afc0e125bec30" + integrity sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ== + +"@coral-xyz/anchor@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.30.1.tgz#17f3e9134c28cd0ea83574c6bab4e410bcecec5d" + integrity sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ== + dependencies: + "@coral-xyz/anchor-errors" "^0.30.1" + "@coral-xyz/borsh" "^0.30.1" + "@noble/hashes" "^1.3.1" + "@solana/web3.js" "^1.68.0" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/borsh@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.30.1.tgz#869d8833abe65685c72e9199b8688477a4f6b0e3" + integrity sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -1000,6 +1041,13 @@ dependencies: "@noble/hashes" "1.4.0" +"@noble/curves@^1.4.2": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b" + integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== + dependencies: + "@noble/hashes" "1.5.0" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" @@ -1010,7 +1058,7 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@noble/hashes@^1.2.0", "@noble/hashes@^1.4.0": +"@noble/hashes@1.5.0", "@noble/hashes@^1.2.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== @@ -1393,6 +1441,34 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz#282046f03e886e352b2d5f5da5eb755e01457f3f" integrity sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA== +"@solana/buffer-layout@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== + dependencies: + buffer "~6.0.3" + +"@solana/web3.js@^1.68.0", "@solana/web3.js@^1.95.3": + version "1.95.3" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.3.tgz#70b5f4d76823f56b5af6403da51125fffeb65ff3" + integrity sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + "@solidity-parser/parser@^0.14.0": version "0.14.5" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" @@ -1412,6 +1488,13 @@ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== +"@swc/helpers@^0.5.11": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" + integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + dependencies: + tslib "^2.4.0" + "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -1480,6 +1563,13 @@ dependencies: "@types/node" "*" +"@types/connect@^3.4.33": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -1563,6 +1653,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== +"@types/node@^12.12.54": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + "@types/node@^20.10.7", "@types/node@^20.4.2": version "20.16.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.4.tgz#2e3d9e1da4761a0fdb725d9497df4bb091e9c2f1" @@ -1614,12 +1709,24 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + "@types/wrap-ansi@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== -"@types/ws@^8.5.5": +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.2.2", "@types/ws@^8.5.5": version "8.5.12" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== @@ -1776,6 +1883,14 @@ resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-9.0.0.tgz#c20ad5da43f6f3676f31556b303d1cb4ea17357e" integrity sha512-L4A8bddlyhjaBAsIv/x1Bvxc38RJz8U8rbbBtxK5oVyOAd5Zz04ZiT3HqzO4FuKq6RGGM1uiA8jvUfmRkKchXw== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -1825,6 +1940,13 @@ agent-base@6: dependencies: debug "4" +agentkeepalive@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -2219,6 +2341,13 @@ bech32@^2.0.0: resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== +bigint-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" + integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== + dependencies: + bindings "^1.3.0" + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -2229,7 +2358,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bindings@^1.5.0: +bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== @@ -2289,6 +2418,15 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + boxen@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" @@ -2372,7 +2510,7 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -bs58@^4.0.0: +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== @@ -2408,11 +2546,24 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-layout@^1.2.0, buffer-layout@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" + integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -2421,6 +2572,13 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +bufferutil@^4.0.1: + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== + dependencies: + node-gyp-build "^4.3.0" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -2457,7 +2615,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.0.0, camelcase@^6.2.0, camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -2707,6 +2865,11 @@ commander@10.0.1, commander@^10.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^8.1.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -2812,6 +2975,13 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2826,6 +2996,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== +crypto-hash@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" + integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== + data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" @@ -2958,6 +3133,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3006,6 +3186,14 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dotenv@16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" @@ -3205,6 +3393,18 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + escalade@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -3646,7 +3846,7 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -eventemitter3@^4.0.0: +eventemitter3@^4.0.0, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -3736,6 +3936,11 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -3772,6 +3977,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== + fast-uri@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" @@ -4531,6 +4741,13 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -4545,7 +4762,7 @@ iconv-lite@0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4946,6 +5163,11 @@ isomorphic-fetch@^3.0.0: node-fetch "^2.6.1" whatwg-fetch "^3.4.1" +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" @@ -4955,6 +5177,24 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jayson@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.2.tgz#443c26a8658703e0b2e881117b09395d88b6982e" + integrity sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + uuid "^8.3.2" + ws "^7.5.10" + js-sha3@0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" @@ -5015,6 +5255,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -5038,6 +5283,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + jsonschema@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" @@ -5191,6 +5441,13 @@ loupe@^2.3.6: dependencies: get-func-name "^2.0.1" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" @@ -5451,7 +5708,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1, ms@^2.1.3: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -5509,6 +5766,14 @@ nise@^5.1.4: just-extend "^6.2.0" path-to-regexp "^6.2.1" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -5521,14 +5786,14 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-fetch@^2.6.1: +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-gyp-build@^4.2.0: +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.8.2" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.2.tgz#4f802b71c1ab2ca16af830e6c1ea7dd1ad9496fa" integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== @@ -5781,6 +6046,11 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== +pako@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -6083,6 +6353,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -6245,6 +6520,22 @@ rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" +rpc-websockets@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.0.2.tgz#4c1568d00b8100f997379a363478f41f8f4b242c" + integrity sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/uuid" "^8.3.4" + "@types/ws" "^8.2.2" + buffer "^6.0.3" + eventemitter3 "^5.0.1" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" + run-async@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" @@ -6503,6 +6794,14 @@ slide@^1.1.5: resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6683,7 +6982,7 @@ string-format@^2.0.0: resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6700,15 +6999,6 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -6760,7 +7050,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -6781,13 +7071,6 @@ strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -6819,6 +7102,16 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== + +superstruct@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" + integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== + supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" @@ -6894,6 +7187,11 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6916,6 +7214,11 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + tiny-secp256k1@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz#fe1dde11a64fcee2091157d4b78bcb300feb9b65" @@ -6967,6 +7270,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -7021,6 +7329,11 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.3, tslib@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -7297,6 +7610,13 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + dependencies: + node-gyp-build "^4.3.0" + utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -7443,7 +7763,7 @@ workerpool@^6.5.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -7461,15 +7781,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -7498,12 +7809,12 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^7.4.6: +ws@^7.4.6, ws@^7.5.10: version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.17.1: +ws@^8.17.1, ws@^8.5.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== From 7a44446d418e46096e022eb98328a3c22e245e01 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 17:00:48 +0900 Subject: [PATCH 07/18] solana --- packages/client/src/solanaDeposit.ts | 111 +++++++++++++++------------ packages/tasks/src/solanaDeposit.ts | 24 +++++- 2 files changed, 80 insertions(+), 55 deletions(-) diff --git a/packages/client/src/solanaDeposit.ts b/packages/client/src/solanaDeposit.ts index b7128ba2..1faee56b 100644 --- a/packages/client/src/solanaDeposit.ts +++ b/packages/client/src/solanaDeposit.ts @@ -2,49 +2,17 @@ import * as anchor from "@coral-xyz/anchor"; import Gateway_IDL from "./idl/gateway.json"; import { ZetaChainClient } from "./client"; import { Keypair } from "@solana/web3.js"; +import { ethers } from "ethers"; const SEED = "meta"; -const getKeypairFromFile = async (filepath: string) => { - const path = await import("path"); - if (filepath[0] === "~") { - const home = process.env.HOME || null; - if (home) { - filepath = path.join(home, filepath.slice(1)); - } - } - // Get contents of file - let fileContents; - try { - const { readFile } = await import("fs/promises"); - const fileContentsBuffer = await readFile(filepath); - fileContents = fileContentsBuffer.toString(); - } catch (error) { - throw new Error(`Could not read keypair from file at '${filepath}'`); - } - // Parse contents of file - let parsedFileContents; - try { - parsedFileContents = Uint8Array.from(JSON.parse(fileContents)); - } catch (thrownObject) { - const error: any = thrownObject; - if (!error.message.includes("Unexpected token")) { - throw error; - } - throw new Error(`Invalid secret key file at '${filepath}'!`); - } - return Keypair.fromSecretKey(parsedFileContents); -}; - -export const solanaDeposit = async function ( - this: ZetaChainClient, - args: { - amount: number; - memo: string; - api: string; - idPath: string; - } -) { +export const solanaDeposit = async (args: { + amount: number; + api: string; + recipient: string; + idPath: string; + params: any[]; +}) => { const keypair = await getKeypairFromFile(args.idPath); const wallet = new anchor.Wallet(keypair); @@ -71,27 +39,68 @@ export const solanaDeposit = async function ( const depositAmount = new anchor.BN( anchor.web3.LAMPORTS_PER_SOL * args.amount ); - const memo = Buffer.from(args.memo); try { - const tx = await gatewayProgram.methods - .deposit(depositAmount, memo) + const tx = new anchor.web3.Transaction(); + const m = Buffer.from( + ethers.utils.arrayify( + args.recipient + + ethers.utils.defaultAbiCoder + .encode(args.params[0], args.params[1]) + .slice(2) + ) + ); + const depositInstruction = await gatewayProgram.methods + .deposit(depositAmount, m) .accounts({ - signer: wallet.publicKey, pda: pdaAccount, + signer: wallet.publicKey, systemProgram: anchor.web3.SystemProgram.programId, }) - .rpc(); + .instruction(); - console.log("Deposit transaction signature:", tx); + tx.add(depositInstruction); - const pdaBalance = await connection.getBalance(pdaAccount); - console.log( - "PDA account SOL balance:", - pdaBalance / anchor.web3.LAMPORTS_PER_SOL, - "SOL" + // Send the transaction + const txSignature = await anchor.web3.sendAndConfirmTransaction( + connection, + tx, + [keypair] ); + + console.log("Transaction signature:", txSignature); } catch (error) { console.error("Transaction failed:", error); } }; + +const getKeypairFromFile = async (filepath: string) => { + const path = await import("path"); + if (filepath[0] === "~") { + const home = process.env.HOME || null; + if (home) { + filepath = path.join(home, filepath.slice(1)); + } + } + // Get contents of file + let fileContents; + try { + const { readFile } = await import("fs/promises"); + const fileContentsBuffer = await readFile(filepath); + fileContents = fileContentsBuffer.toString(); + } catch (error) { + throw new Error(`Could not read keypair from file at '${filepath}'`); + } + // Parse contents of file + let parsedFileContents; + try { + parsedFileContents = Uint8Array.from(JSON.parse(fileContents)); + } catch (thrownObject) { + const error: any = thrownObject; + if (!error.message.includes("Unexpected token")) { + throw error; + } + throw new Error(`Invalid secret key file at '${filepath}'!`); + } + return Keypair.fromSecretKey(parsedFileContents); +}; diff --git a/packages/tasks/src/solanaDeposit.ts b/packages/tasks/src/solanaDeposit.ts index b2a910a8..f9d2f759 100644 --- a/packages/tasks/src/solanaDeposit.ts +++ b/packages/tasks/src/solanaDeposit.ts @@ -1,3 +1,5 @@ +import bech32 from "bech32"; +import { utils } from "ethers"; import { task } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; import { ZetaChainClient } from "../../client/src"; @@ -6,13 +8,27 @@ export const solanaDeposit = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const { amount, memo, api, idPath } = args; const client = new ZetaChainClient({ network: "testnet" }); - await client.solanaDeposit({ amount, memo, api, idPath }); + let recipient; + try { + if ((bech32 as any).decode(args.recipient)) { + recipient = utils.solidityPack( + ["bytes"], + [utils.toUtf8Bytes(args.recipient)] + ); + } + } catch (e) { + recipient = args.recipient; + } + const { amount, api, idPath } = args; + const params = [JSON.parse(args.types), args.values]; + await client.solanaDeposit({ amount, api, recipient, idPath, params }); }; task("solana-deposit", "Solana deposit", solanaDeposit) .addParam("amount", "Amount of SOL to deposit") - .addParam("memo", "Memo") + .addParam("recipient", "Universal contract address") .addOptionalParam("api", "Solana API", "https://api.devnet.solana.com") - .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json"); + .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); From 39ea712d4045a8c294cd0e8751e5fb4038072b8a Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 17:17:12 +0900 Subject: [PATCH 08/18] fix build --- packages/client/src/solanaDeposit.ts | 17 +- tsconfig.json | 9 +- .../contracts/zevm/interfaces/IZRC20.ts | 684 ------------------ .../contracts/zevm/interfaces/ZContract.ts | 138 ---- .../contracts/zevm/interfaces/index.ts | 6 +- .../SystemContract__factory.ts | 2 +- .../zevm/interfaces/IZRC20__factory.ts | 458 ------------ .../zevm/interfaces/ZContract__factory.ts | 71 -- .../contracts/zevm/interfaces/index.ts | 4 +- .../contracts/OnlySystem__factory.ts | 2 +- .../contracts/SwapHelperLib__factory.ts | 2 +- .../contracts/TestSystemContract__factory.ts | 2 +- .../MockSystemContract__factory.ts | 2 +- typechain-types/hardhat.d.ts | 27 + typechain-types/index.ts | 14 +- 15 files changed, 59 insertions(+), 1379 deletions(-) delete mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.ts delete mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract.ts delete mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20__factory.ts delete mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract__factory.ts diff --git a/packages/client/src/solanaDeposit.ts b/packages/client/src/solanaDeposit.ts index 1faee56b..2bab252f 100644 --- a/packages/client/src/solanaDeposit.ts +++ b/packages/client/src/solanaDeposit.ts @@ -6,13 +6,16 @@ import { ethers } from "ethers"; const SEED = "meta"; -export const solanaDeposit = async (args: { - amount: number; - api: string; - recipient: string; - idPath: string; - params: any[]; -}) => { +export const solanaDeposit = async function ( + this: ZetaChainClient, + args: { + amount: number; + api: string; + recipient: string; + idPath: string; + params: any[]; + } +) { const keypair = await getKeypairFromFile(args.idPath); const wallet = new anchor.Wallet(keypair); diff --git a/tsconfig.json b/tsconfig.json index e6061eda..70ee3131 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,14 +12,7 @@ "outDir": "./dist", "skipLibCheck": true, "sourceMap": false, - "strict": true, - "typeRoots": [ - "@types", - "./node_modules/@types", - "./packages/tasks/src", - "./packages/client/src", - "./packages/test/src" - ] + "strict": true }, "files": ["./hardhat.config.ts"], "include": ["packages/client", "packages/tasks", "packages/test"], diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.ts deleted file mode 100644 index 6ec4e17e..00000000 --- a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.ts +++ /dev/null @@ -1,684 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../../../../common"; - -export interface IZRC20Interface extends utils.Interface { - functions: { - "PROTOCOL_FEE()": FunctionFragment; - "allowance(address,address)": FunctionFragment; - "approve(address,uint256)": FunctionFragment; - "balanceOf(address)": FunctionFragment; - "burn(address,uint256)": FunctionFragment; - "decreaseAllowance(address,uint256)": FunctionFragment; - "deposit(address,uint256)": FunctionFragment; - "increaseAllowance(address,uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "transfer(address,uint256)": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "withdraw(bytes,uint256)": FunctionFragment; - "withdrawGasFee()": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "PROTOCOL_FEE" - | "allowance" - | "approve" - | "balanceOf" - | "burn" - | "decreaseAllowance" - | "deposit" - | "increaseAllowance" - | "totalSupply" - | "transfer" - | "transferFrom" - | "withdraw" - | "withdrawGasFee" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "PROTOCOL_FEE", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "allowance", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "approve", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "balanceOf", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "burn", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "decreaseAllowance", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "deposit", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "increaseAllowance", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "totalSupply", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "transfer", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "transferFrom", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "withdraw", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "withdrawGasFee", - values?: undefined - ): string; - - decodeFunctionResult( - functionFragment: "PROTOCOL_FEE", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "decreaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "increaseAllowance", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "totalSupply", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "transferFrom", - data: BytesLike - ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "withdrawGasFee", - data: BytesLike - ): Result; - - events: { - "Approval(address,address,uint256)": EventFragment; - "Deposit(bytes,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; - "UpdatedGasLimit(uint256)": EventFragment; - "UpdatedProtocolFlatFee(uint256)": EventFragment; - "UpdatedSystemContract(address)": EventFragment; - "Withdrawal(address,bytes,uint256,uint256,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UpdatedGasLimit"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UpdatedProtocolFlatFee"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UpdatedSystemContract"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Withdrawal"): EventFragment; -} - -export interface ApprovalEventObject { - owner: string; - spender: string; - value: BigNumber; -} -export type ApprovalEvent = TypedEvent< - [string, string, BigNumber], - ApprovalEventObject ->; - -export type ApprovalEventFilter = TypedEventFilter; - -export interface DepositEventObject { - from: string; - to: string; - value: BigNumber; -} -export type DepositEvent = TypedEvent< - [string, string, BigNumber], - DepositEventObject ->; - -export type DepositEventFilter = TypedEventFilter; - -export interface TransferEventObject { - from: string; - to: string; - value: BigNumber; -} -export type TransferEvent = TypedEvent< - [string, string, BigNumber], - TransferEventObject ->; - -export type TransferEventFilter = TypedEventFilter; - -export interface UpdatedGasLimitEventObject { - gasLimit: BigNumber; -} -export type UpdatedGasLimitEvent = TypedEvent< - [BigNumber], - UpdatedGasLimitEventObject ->; - -export type UpdatedGasLimitEventFilter = TypedEventFilter; - -export interface UpdatedProtocolFlatFeeEventObject { - protocolFlatFee: BigNumber; -} -export type UpdatedProtocolFlatFeeEvent = TypedEvent< - [BigNumber], - UpdatedProtocolFlatFeeEventObject ->; - -export type UpdatedProtocolFlatFeeEventFilter = - TypedEventFilter; - -export interface UpdatedSystemContractEventObject { - systemContract: string; -} -export type UpdatedSystemContractEvent = TypedEvent< - [string], - UpdatedSystemContractEventObject ->; - -export type UpdatedSystemContractEventFilter = - TypedEventFilter; - -export interface WithdrawalEventObject { - from: string; - to: string; - value: BigNumber; - gasFee: BigNumber; - protocolFlatFee: BigNumber; -} -export type WithdrawalEvent = TypedEvent< - [string, string, BigNumber, BigNumber, BigNumber], - WithdrawalEventObject ->; - -export type WithdrawalEventFilter = TypedEventFilter; - -export interface IZRC20 extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: IZRC20Interface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - PROTOCOL_FEE(overrides?: CallOverrides): Promise<[BigNumber]>; - - allowance( - owner: PromiseOrValue, - spender: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - approve( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - burn( - account: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - decreaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deposit( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - increaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transfer( - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferFrom( - sender: PromiseOrValue, - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; - }; - - PROTOCOL_FEE(overrides?: CallOverrides): Promise; - - allowance( - owner: PromiseOrValue, - spender: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - approve( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - burn( - account: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - decreaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deposit( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - increaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferFrom( - sender: PromiseOrValue, - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; - - callStatic: { - PROTOCOL_FEE(overrides?: CallOverrides): Promise; - - allowance( - owner: PromiseOrValue, - spender: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - approve( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - burn( - account: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - decreaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - deposit( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - increaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - transferFrom( - sender: PromiseOrValue, - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdraw( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; - }; - - filters: { - "Approval(address,address,uint256)"( - owner?: PromiseOrValue | null, - spender?: PromiseOrValue | null, - value?: null - ): ApprovalEventFilter; - Approval( - owner?: PromiseOrValue | null, - spender?: PromiseOrValue | null, - value?: null - ): ApprovalEventFilter; - - "Deposit(bytes,address,uint256)"( - from?: null, - to?: PromiseOrValue | null, - value?: null - ): DepositEventFilter; - Deposit( - from?: null, - to?: PromiseOrValue | null, - value?: null - ): DepositEventFilter; - - "Transfer(address,address,uint256)"( - from?: PromiseOrValue | null, - to?: PromiseOrValue | null, - value?: null - ): TransferEventFilter; - Transfer( - from?: PromiseOrValue | null, - to?: PromiseOrValue | null, - value?: null - ): TransferEventFilter; - - "UpdatedGasLimit(uint256)"(gasLimit?: null): UpdatedGasLimitEventFilter; - UpdatedGasLimit(gasLimit?: null): UpdatedGasLimitEventFilter; - - "UpdatedProtocolFlatFee(uint256)"( - protocolFlatFee?: null - ): UpdatedProtocolFlatFeeEventFilter; - UpdatedProtocolFlatFee( - protocolFlatFee?: null - ): UpdatedProtocolFlatFeeEventFilter; - - "UpdatedSystemContract(address)"( - systemContract?: null - ): UpdatedSystemContractEventFilter; - UpdatedSystemContract( - systemContract?: null - ): UpdatedSystemContractEventFilter; - - "Withdrawal(address,bytes,uint256,uint256,uint256)"( - from?: PromiseOrValue | null, - to?: null, - value?: null, - gasFee?: null, - protocolFlatFee?: null - ): WithdrawalEventFilter; - Withdrawal( - from?: PromiseOrValue | null, - to?: null, - value?: null, - gasFee?: null, - protocolFlatFee?: null - ): WithdrawalEventFilter; - }; - - estimateGas: { - PROTOCOL_FEE(overrides?: CallOverrides): Promise; - - allowance( - owner: PromiseOrValue, - spender: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - approve( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - burn( - account: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - decreaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deposit( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - increaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferFrom( - sender: PromiseOrValue, - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawGasFee(overrides?: CallOverrides): Promise; - }; - - populateTransaction: { - PROTOCOL_FEE(overrides?: CallOverrides): Promise; - - allowance( - owner: PromiseOrValue, - spender: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - approve( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - balanceOf( - account: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - burn( - account: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - decreaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - deposit( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - increaseAllowance( - spender: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - totalSupply(overrides?: CallOverrides): Promise; - - transfer( - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - transferFrom( - sender: PromiseOrValue, - recipient: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - to: PromiseOrValue, - amount: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdrawGasFee(overrides?: CallOverrides): Promise; - }; -} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract.ts deleted file mode 100644 index 5a1923de..00000000 --- a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract.ts +++ /dev/null @@ -1,138 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { FunctionFragment, Result } from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "../../../../../common"; - -export type ZContextStruct = { - origin: PromiseOrValue; - sender: PromiseOrValue; - chainID: PromiseOrValue; -}; - -export type ZContextStructOutput = [string, string, BigNumber] & { - origin: string; - sender: string; - chainID: BigNumber; -}; - -export interface ZContractInterface extends utils.Interface { - functions: { - "onCrossChainCall((bytes,address,uint256),address,uint256,bytes)": FunctionFragment; - }; - - getFunction(nameOrSignatureOrTopic: "onCrossChainCall"): FunctionFragment; - - encodeFunctionData( - functionFragment: "onCrossChainCall", - values: [ - ZContextStruct, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - - decodeFunctionResult( - functionFragment: "onCrossChainCall", - data: BytesLike - ): Result; - - events: {}; -} - -export interface ZContract extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: ZContractInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - onCrossChainCall( - context: ZContextStruct, - zrc20: PromiseOrValue, - amount: PromiseOrValue, - message: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - onCrossChainCall( - context: ZContextStruct, - zrc20: PromiseOrValue, - amount: PromiseOrValue, - message: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - onCrossChainCall( - context: ZContextStruct, - zrc20: PromiseOrValue, - amount: PromiseOrValue, - message: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: {}; - - estimateGas: { - onCrossChainCall( - context: ZContextStruct, - zrc20: PromiseOrValue, - amount: PromiseOrValue, - message: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - onCrossChainCall( - context: ZContextStruct, - zrc20: PromiseOrValue, - amount: PromiseOrValue, - message: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts index 7954e646..92e52029 100644 --- a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts @@ -1,5 +1,7 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export type { IZRC20 } from "./IZRC20"; -export type { ZContract } from "./ZContract"; +import type * as izrc20Sol from "./IZRC20.sol"; +export type { izrc20Sol }; +import type * as zContractSol from "./zContract.sol"; +export type { zContractSol }; diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContract__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContract__factory.ts index 0f4533d3..8355c03a 100644 --- a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContract__factory.ts +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContract__factory.ts @@ -429,7 +429,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b50604051620018aa380380620018aa8339818101604052810190620000379190620001ac565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a15050506200025b565b600081519050620001a68162000241565b92915050565b600080600060608486031215620001c857620001c76200023c565b5b6000620001d88682870162000195565b9350506020620001eb8682870162000195565b9250506040620001fe8682870162000195565b9150509250925092565b600062000215826200021c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200024c8162000208565b81146200025857600080fd5b50565b60805160601c60a05160601c61161c6200028e600039600061051b0152600081816105bd0152610bc5015261161c6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc1461025e578063d7fd7afb1461028e578063d936a012146102be578063ee2815ba146102dc576100f5565b806397770dff146101ec578063a7cb050714610208578063c39aca3714610224578063c62178ac14610240576100f5565b8063513a9c05116100d3578063513a9c0514610164578063569541b914610194578063842da36d146101b257806391dd645f146101d0576100f5565b80630be15547146100fa5780631f0e251b1461012a5780633ce4a5bc14610146575b600080fd5b610114600480360381019061010f9190611022565b6102f8565b60405161012191906112b1565b60405180910390f35b610144600480360381019061013f9190610ebf565b61032b565b005b61014e6104a8565b60405161015b91906112b1565b60405180910390f35b61017e60048036038101906101799190611022565b6104c0565b60405161018b91906112b1565b60405180910390f35b61019c6104f3565b6040516101a991906112b1565b60405180910390f35b6101ba610519565b6040516101c791906112b1565b60405180910390f35b6101ea60048036038101906101e5919061104f565b61053d565b005b61020660048036038101906102019190610ebf565b610697565b005b610222600480360381019061021d919061108f565b610814565b005b61023e60048036038101906102399190610f6c565b6108e1565b005b610248610b13565b60405161025591906112b1565b60405180910390f35b61027860048036038101906102739190610eec565b610b39565b60405161028591906112b1565b60405180910390f35b6102a860048036038101906102a39190611022565b610bab565b6040516102b5919061134a565b60405180910390f35b6102c6610bc3565b6040516102d391906112b1565b60405180910390f35b6102f660048036038101906102f1919061104f565b610be7565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103a4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561040b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161049d91906112b1565b60405180910390a150565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b6576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106057f0000000000000000000000000000000000000000000000000000000000000000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610b39565b9050806002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e838260405161068a929190611365565b60405180910390a1505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610710576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610777576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161080991906112b1565b60405180910390a150565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d82826040516108d592919061138e565b60405180910390a15050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806109d357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610a0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610a459291906112cc565b602060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a979190610f3f565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610ad99594939291906112f5565b600060405180830381600087803b158015610af357600080fd5b505af1158015610b07573d6000803e3d6000fd5b50505050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000610b488585610cef565b91509150858282604051602001610b60929190611243565b60405160208183030381529060405280519060200120604051602001610b8792919061126f565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c60576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d8282604051610ce3929190611365565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610d58576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610d92578284610d95565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e04576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600081359050610e1a816115a1565b92915050565b600081519050610e2f816115b8565b92915050565b60008083601f840112610e4b57610e4a61150e565b5b8235905067ffffffffffffffff811115610e6857610e67611509565b5b602083019150836001820283011115610e8457610e8361151d565b5b9250929050565b600060608284031215610ea157610ea0611513565b5b81905092915050565b600081359050610eb9816115cf565b92915050565b600060208284031215610ed557610ed461152c565b5b6000610ee384828501610e0b565b91505092915050565b600080600060608486031215610f0557610f0461152c565b5b6000610f1386828701610e0b565b9350506020610f2486828701610e0b565b9250506040610f3586828701610e0b565b9150509250925092565b600060208284031215610f5557610f5461152c565b5b6000610f6384828501610e20565b91505092915050565b60008060008060008060a08789031215610f8957610f8861152c565b5b600087013567ffffffffffffffff811115610fa757610fa6611522565b5b610fb389828a01610e8b565b9650506020610fc489828a01610e0b565b9550506040610fd589828a01610eaa565b9450506060610fe689828a01610e0b565b935050608087013567ffffffffffffffff81111561100757611006611522565b5b61101389828a01610e35565b92509250509295509295509295565b6000602082840312156110385761103761152c565b5b600061104684828501610eaa565b91505092915050565b600080604083850312156110665761106561152c565b5b600061107485828601610eaa565b925050602061108585828601610e0b565b9150509250929050565b600080604083850312156110a6576110a561152c565b5b60006110b485828601610eaa565b92505060206110c585828601610eaa565b9150509250929050565b6110d881611475565b82525050565b6110e781611475565b82525050565b6110fe6110f982611475565b6114d6565b82525050565b61111561111082611493565b6114e8565b82525050565b600061112783856113b7565b93506111348385846114c7565b61113d83611531565b840190509392505050565b600061115483856113c8565b93506111618385846114c7565b61116a83611531565b840190509392505050565b60006111826020836113d9565b915061118d8261154f565b602082019050919050565b60006111a56001836113d9565b91506111b082611578565b600182019050919050565b6000606083016111ce60008401846113fb565b85830360008701526111e183828461111b565b925050506111f260208401846113e4565b6111ff60208601826110cf565b5061120d604084018461145e565b61121a6040860182611225565b508091505092915050565b61122e816114bd565b82525050565b61123d816114bd565b82525050565b600061124f82856110ed565b60148201915061125f82846110ed565b6014820191508190509392505050565b600061127a82611198565b915061128682856110ed565b6014820191506112968284611104565b6020820191506112a582611175565b91508190509392505050565b60006020820190506112c660008301846110de565b92915050565b60006040820190506112e160008301856110de565b6112ee6020830184611234565b9392505050565b6000608082019050818103600083015261130f81886111bb565b905061131e60208301876110de565b61132b6040830186611234565b818103606083015261133e818486611148565b90509695505050505050565b600060208201905061135f6000830184611234565b92915050565b600060408201905061137a6000830185611234565b61138760208301846110de565b9392505050565b60006040820190506113a36000830185611234565b6113b06020830184611234565b9392505050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006113f36020840184610e0b565b905092915050565b6000808335600160200384360303811261141857611417611527565b5b83810192508235915060208301925067ffffffffffffffff8211156114405761143f611504565b5b60018202360384131561145657611455611518565b5b509250929050565b600061146d6020840184610eaa565b905092915050565b60006114808261149d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60006114e1826114f2565b9050919050565b6000819050919050565b60006114fd82611542565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b6115aa81611475565b81146115b557600080fd5b50565b6115c181611487565b81146115cc57600080fd5b50565b6115d8816114bd565b81146115e357600080fd5b5056fea2646970667358221220abc631448c64fd9f3fac6218e024bdf1dd8935964dcdf2e981c65163599f794764736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b50604051620018aa380380620018aa8339818101604052810190620000379190620001ac565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a15050506200025b565b600081519050620001a68162000241565b92915050565b600080600060608486031215620001c857620001c76200023c565b5b6000620001d88682870162000195565b9350506020620001eb8682870162000195565b9250506040620001fe8682870162000195565b9150509250925092565b600062000215826200021c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200024c8162000208565b81146200025857600080fd5b50565b60805160601c60a05160601c61161c6200028e600039600061051b0152600081816105bd0152610bc5015261161c6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc1461025e578063d7fd7afb1461028e578063d936a012146102be578063ee2815ba146102dc576100f5565b806397770dff146101ec578063a7cb050714610208578063c39aca3714610224578063c62178ac14610240576100f5565b8063513a9c05116100d3578063513a9c0514610164578063569541b914610194578063842da36d146101b257806391dd645f146101d0576100f5565b80630be15547146100fa5780631f0e251b1461012a5780633ce4a5bc14610146575b600080fd5b610114600480360381019061010f9190611022565b6102f8565b60405161012191906112b1565b60405180910390f35b610144600480360381019061013f9190610ebf565b61032b565b005b61014e6104a8565b60405161015b91906112b1565b60405180910390f35b61017e60048036038101906101799190611022565b6104c0565b60405161018b91906112b1565b60405180910390f35b61019c6104f3565b6040516101a991906112b1565b60405180910390f35b6101ba610519565b6040516101c791906112b1565b60405180910390f35b6101ea60048036038101906101e5919061104f565b61053d565b005b61020660048036038101906102019190610ebf565b610697565b005b610222600480360381019061021d919061108f565b610814565b005b61023e60048036038101906102399190610f6c565b6108e1565b005b610248610b13565b60405161025591906112b1565b60405180910390f35b61027860048036038101906102739190610eec565b610b39565b60405161028591906112b1565b60405180910390f35b6102a860048036038101906102a39190611022565b610bab565b6040516102b5919061134a565b60405180910390f35b6102c6610bc3565b6040516102d391906112b1565b60405180910390f35b6102f660048036038101906102f1919061104f565b610be7565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103a4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561040b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161049d91906112b1565b60405180910390a150565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b6576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106057f0000000000000000000000000000000000000000000000000000000000000000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610b39565b9050806002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e838260405161068a929190611365565b60405180910390a1505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610710576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610777576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161080991906112b1565b60405180910390a150565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d82826040516108d592919061138e565b60405180910390a15050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806109d357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610a0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610a459291906112cc565b602060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a979190610f3f565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610ad99594939291906112f5565b600060405180830381600087803b158015610af357600080fd5b505af1158015610b07573d6000803e3d6000fd5b50505050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000610b488585610cef565b91509150858282604051602001610b60929190611243565b60405160208183030381529060405280519060200120604051602001610b8792919061126f565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c60576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d8282604051610ce3929190611365565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610d58576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610d92578284610d95565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e04576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600081359050610e1a816115a1565b92915050565b600081519050610e2f816115b8565b92915050565b60008083601f840112610e4b57610e4a61150e565b5b8235905067ffffffffffffffff811115610e6857610e67611509565b5b602083019150836001820283011115610e8457610e8361151d565b5b9250929050565b600060608284031215610ea157610ea0611513565b5b81905092915050565b600081359050610eb9816115cf565b92915050565b600060208284031215610ed557610ed461152c565b5b6000610ee384828501610e0b565b91505092915050565b600080600060608486031215610f0557610f0461152c565b5b6000610f1386828701610e0b565b9350506020610f2486828701610e0b565b9250506040610f3586828701610e0b565b9150509250925092565b600060208284031215610f5557610f5461152c565b5b6000610f6384828501610e20565b91505092915050565b60008060008060008060a08789031215610f8957610f8861152c565b5b600087013567ffffffffffffffff811115610fa757610fa6611522565b5b610fb389828a01610e8b565b9650506020610fc489828a01610e0b565b9550506040610fd589828a01610eaa565b9450506060610fe689828a01610e0b565b935050608087013567ffffffffffffffff81111561100757611006611522565b5b61101389828a01610e35565b92509250509295509295509295565b6000602082840312156110385761103761152c565b5b600061104684828501610eaa565b91505092915050565b600080604083850312156110665761106561152c565b5b600061107485828601610eaa565b925050602061108585828601610e0b565b9150509250929050565b600080604083850312156110a6576110a561152c565b5b60006110b485828601610eaa565b92505060206110c585828601610eaa565b9150509250929050565b6110d881611475565b82525050565b6110e781611475565b82525050565b6110fe6110f982611475565b6114d6565b82525050565b61111561111082611493565b6114e8565b82525050565b600061112783856113b7565b93506111348385846114c7565b61113d83611531565b840190509392505050565b600061115483856113c8565b93506111618385846114c7565b61116a83611531565b840190509392505050565b60006111826020836113d9565b915061118d8261154f565b602082019050919050565b60006111a56001836113d9565b91506111b082611578565b600182019050919050565b6000606083016111ce60008401846113fb565b85830360008701526111e183828461111b565b925050506111f260208401846113e4565b6111ff60208601826110cf565b5061120d604084018461145e565b61121a6040860182611225565b508091505092915050565b61122e816114bd565b82525050565b61123d816114bd565b82525050565b600061124f82856110ed565b60148201915061125f82846110ed565b6014820191508190509392505050565b600061127a82611198565b915061128682856110ed565b6014820191506112968284611104565b6020820191506112a582611175565b91508190509392505050565b60006020820190506112c660008301846110de565b92915050565b60006040820190506112e160008301856110de565b6112ee6020830184611234565b9392505050565b6000608082019050818103600083015261130f81886111bb565b905061131e60208301876110de565b61132b6040830186611234565b818103606083015261133e818486611148565b90509695505050505050565b600060208201905061135f6000830184611234565b92915050565b600060408201905061137a6000830185611234565b61138760208301846110de565b9392505050565b60006040820190506113a36000830185611234565b6113b06020830184611234565b9392505050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006113f36020840184610e0b565b905092915050565b6000808335600160200384360303811261141857611417611527565b5b83810192508235915060208301925067ffffffffffffffff8211156114405761143f611504565b5b60018202360384131561145657611455611518565b5b509250929050565b600061146d6020840184610eaa565b905092915050565b60006114808261149d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60006114e1826114f2565b9050919050565b6000819050919050565b60006114fd82611542565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b6115aa81611475565b81146115b557600080fd5b50565b6115c181611487565b81146115cc57600080fd5b50565b6115d8816114bd565b81146115e357600080fd5b5056fea2646970667358221220ab79b5edb9ddbd6b63d2d42a2d9bbbc776467678663daf3e41a892ddffc4cba264736f6c63430008070033"; type SystemContractConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20__factory.ts deleted file mode 100644 index 133f3e6e..00000000 --- a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20__factory.ts +++ /dev/null @@ -1,458 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - IZRC20, - IZRC20Interface, -} from "../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20"; - -const _abi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "owner", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "spender", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "bytes", - name: "from", - type: "bytes", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Deposit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "to", - type: "address", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "gasLimit", - type: "uint256", - }, - ], - name: "UpdatedGasLimit", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "protocolFlatFee", - type: "uint256", - }, - ], - name: "UpdatedProtocolFlatFee", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "address", - name: "systemContract", - type: "address", - }, - ], - name: "UpdatedSystemContract", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "from", - type: "address", - }, - { - indexed: false, - internalType: "bytes", - name: "to", - type: "bytes", - }, - { - indexed: false, - internalType: "uint256", - name: "value", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "gasFee", - type: "uint256", - }, - { - indexed: false, - internalType: "uint256", - name: "protocolFlatFee", - type: "uint256", - }, - ], - name: "Withdrawal", - type: "event", - }, - { - inputs: [], - name: "PROTOCOL_FEE", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "owner", - type: "address", - }, - { - internalType: "address", - name: "spender", - type: "address", - }, - ], - name: "allowance", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "approve", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - ], - name: "balanceOf", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "account", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "burn", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "decreaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "to", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "deposit", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "spender", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "increaseAllowance", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "totalSupply", - outputs: [ - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transfer", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "address", - name: "recipient", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "transferFrom", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "bytes", - name: "to", - type: "bytes", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - ], - name: "withdraw", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "withdrawGasFee", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - stateMutability: "view", - type: "function", - }, -] as const; - -export class IZRC20__factory { - static readonly abi = _abi; - static createInterface(): IZRC20Interface { - return new utils.Interface(_abi) as IZRC20Interface; - } - static connect(address: string, signerOrProvider: Signer | Provider): IZRC20 { - return new Contract(address, _abi, signerOrProvider) as IZRC20; - } -} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract__factory.ts deleted file mode 100644 index b678930c..00000000 --- a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract__factory.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -import { Contract, Signer, utils } from "ethers"; -import type { Provider } from "@ethersproject/providers"; -import type { - ZContract, - ZContractInterface, -} from "../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract"; - -const _abi = [ - { - inputs: [ - { - components: [ - { - internalType: "bytes", - name: "origin", - type: "bytes", - }, - { - internalType: "address", - name: "sender", - type: "address", - }, - { - internalType: "uint256", - name: "chainID", - type: "uint256", - }, - ], - internalType: "struct zContext", - name: "context", - type: "tuple", - }, - { - internalType: "address", - name: "zrc20", - type: "address", - }, - { - internalType: "uint256", - name: "amount", - type: "uint256", - }, - { - internalType: "bytes", - name: "message", - type: "bytes", - }, - ], - name: "onCrossChainCall", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -] as const; - -export class ZContract__factory { - static readonly abi = _abi; - static createInterface(): ZContractInterface { - return new utils.Interface(_abi) as ZContractInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): ZContract { - return new Contract(address, _abi, signerOrProvider) as ZContract; - } -} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts index a62dd52b..920ccb83 100644 --- a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/index.ts @@ -1,5 +1,5 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ -export { IZRC20__factory } from "./IZRC20__factory"; -export { ZContract__factory } from "./ZContract__factory"; +export * as izrc20Sol from "./IZRC20.sol"; +export * as zContractSol from "./zContract.sol"; diff --git a/typechain-types/factories/contracts/OnlySystem__factory.ts b/typechain-types/factories/contracts/OnlySystem__factory.ts index 8d7775ba..5bd5ee33 100644 --- a/typechain-types/factories/contracts/OnlySystem__factory.ts +++ b/typechain-types/factories/contracts/OnlySystem__factory.ts @@ -24,7 +24,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212201ab8eb4b85cea37bdebcfd76388ba1fb426a3b2974f95edcfb6b12919a1c76d564736f6c63430008070033"; + "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220d2b569a909b7bd77fe51a46b4cde29532290efe882021440ba463a7fdc00c03164736f6c63430008070033"; type OnlySystemConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/SwapHelperLib__factory.ts b/typechain-types/factories/contracts/SwapHelperLib__factory.ts index 006b1bcd..b631670a 100644 --- a/typechain-types/factories/contracts/SwapHelperLib__factory.ts +++ b/typechain-types/factories/contracts/SwapHelperLib__factory.ts @@ -136,7 +136,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6113cb610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063b864987914610045578063c63585cc14610075575b600080fd5b61005f600480360381019061005a9190610e1b565b6100a5565b60405161006c9190611028565b60405180910390f35b61008f600480360381019061008a9190610dc8565b610519565b60405161009c9190610fe4565b60405180910390f35b60006060600267ffffffffffffffff8111156100c4576100c361128f565b5b6040519080825280602002602001820160405280156100f25781602001602082028036833780820191505090505b509050848160008151811061010a57610109611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061015957610158611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061021d8773ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610d9b565b858461058b565b9050600367ffffffffffffffff81111561023a5761023961128f565b5b6040519080825280602002602001820160405280156102685781602001602082028036833780820191505090505b50915085826000815181106102805761027f611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff1663569541b96040518163ffffffff1660e01b815260040160206040518083038186803b15801561030057600080fd5b505afa158015610314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103389190610d9b565b8260018151811061034c5761034b611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848260028151811061039b5761039a611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061045f8873ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104589190610d9b565b868561058b565b9050806001825161047091906110d5565b8151811061048157610480611260565b5b6020026020010151826001845161049891906110d5565b815181106104a9576104a8611260565b5b6020026020010151116104e35780600182516104c591906110d5565b815181106104d6576104d5611260565b5b602002602001015161050c565b81600183516104f291906110d5565b8151811061050357610502611260565b5b60200260200101515b9350505050949350505050565b6000806000610528858561070d565b91509150858282604051602001610540929190610f76565b60405160208183030381529060405280519060200120604051602001610567929190610fa2565b6040516020818303038152906040528051906020012060001c925050509392505050565b60606002825110156105c9576040517f20db826700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815167ffffffffffffffff8111156105e4576105e361128f565b5b6040519080825280602002602001820160405280156106125781602001602082028036833780820191505090505b509050828160008151811061062a57610629611260565b5b60200260200101818152505060005b6001835161064791906110d5565b8110156107055760008061069c8786858151811061066857610667611260565b5b60200260200101518760018761067e919061104e565b8151811061068f5761068e611260565b5b6020026020010151610829565b915091506106c58484815181106106b6576106b5611260565b5b6020026020010151838361093b565b846001856106d3919061104e565b815181106106e4576106e3611260565b5b602002602001018181525050505080806106fd9061118b565b915050610639565b509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610776576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106107b05782846107b3565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610822576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008060006108388585610a30565b509050600080610849888888610b4c565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190610e82565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610925578082610928565b81815b8095508196505050505050935093915050565b600080841415610977576040517f098fb56100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314806109865750600082145b156109bd576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109d46103e586610be290919063ffffffff16565b905060006109eb8483610be290919063ffffffff16565b90506000610a1683610a086103e889610be290919063ffffffff16565b610c3e90919063ffffffff16565b90508082610a2491906110a4565b93505050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a99576040517fbd969eb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610ad3578284610ad6565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008373ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401610b89929190610fff565b60206040518083038186803b158015610ba157600080fd5b505afa158015610bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd99190610d9b565b90509392505050565b600080610bf88385610c9a90919063ffffffff16565b809350819250505080610c37576040517f5797276a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b600080610c548385610cee90919063ffffffff16565b809350819250505080610c93576040517fa259879500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b6000806000841415610cb3576001600091509150610ce7565b6000838502905083858281610ccb57610cca611231565b5b0414610cde576000809250925050610ce7565b60018192509250505b9250929050565b6000806000838501905084811015610d0d576000809250925050610d16565b60018192509250505b9250929050565b600081359050610d2c81611322565b92915050565b600081519050610d4181611322565b92915050565b600081359050610d5681611339565b92915050565b600081519050610d6b81611350565b92915050565b600081359050610d8081611367565b92915050565b600081519050610d958161137e565b92915050565b600060208284031215610db157610db06112be565b5b6000610dbf84828501610d32565b91505092915050565b600080600060608486031215610de157610de06112be565b5b6000610def86828701610d1d565b9350506020610e0086828701610d1d565b9250506040610e1186828701610d1d565b9150509250925092565b60008060008060808587031215610e3557610e346112be565b5b6000610e4387828801610d47565b9450506020610e5487828801610d1d565b9350506040610e6587828801610d1d565b9250506060610e7687828801610d71565b91505092959194509250565b600080600060608486031215610e9b57610e9a6112be565b5b6000610ea986828701610d5c565b9350506020610eba86828701610d5c565b9250506040610ecb86828701610d86565b9150509250925092565b610ede81611109565b82525050565b610eed81611109565b82525050565b610f04610eff82611109565b6111d4565b82525050565b610f1b610f168261111b565b6111e6565b82525050565b6000610f2e602083611043565b9150610f39826112d0565b602082019050919050565b6000610f51600183611043565b9150610f5c826112f9565b600182019050919050565b610f7081611171565b82525050565b6000610f828285610ef3565b601482019150610f928284610ef3565b6014820191508190509392505050565b6000610fad82610f44565b9150610fb98285610ef3565b601482019150610fc98284610f0a565b602082019150610fd882610f21565b91508190509392505050565b6000602082019050610ff96000830184610ee4565b92915050565b60006040820190506110146000830185610ed5565b6110216020830184610ed5565b9392505050565b600060208201905061103d6000830184610f67565b92915050565b600081905092915050565b600061105982611171565b915061106483611171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561109957611098611202565b5b828201905092915050565b60006110af82611171565b91506110ba83611171565b9250826110ca576110c9611231565b5b828204905092915050565b60006110e082611171565b91506110eb83611171565b9250828210156110fe576110fd611202565b5b828203905092915050565b600061111482611151565b9050919050565b6000819050919050565b600061113082611109565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600061119682611171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111c9576111c8611202565b5b600182019050919050565b60006111df826111f0565b9050919050565b6000819050919050565b60006111fb826112c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b61132b81611109565b811461133657600080fd5b50565b61134281611125565b811461134d57600080fd5b50565b61135981611137565b811461136457600080fd5b50565b61137081611171565b811461137b57600080fd5b50565b6113878161117b565b811461139257600080fd5b5056fea26469706673582212200cfb8bfcd1e1ce90ae3341161db50ec139df6b1f755b577055e02710b74062a864736f6c63430008070033"; + "0x6113cb610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063b864987914610045578063c63585cc14610075575b600080fd5b61005f600480360381019061005a9190610e1b565b6100a5565b60405161006c9190611028565b60405180910390f35b61008f600480360381019061008a9190610dc8565b610519565b60405161009c9190610fe4565b60405180910390f35b60006060600267ffffffffffffffff8111156100c4576100c361128f565b5b6040519080825280602002602001820160405280156100f25781602001602082028036833780820191505090505b509050848160008151811061010a57610109611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061015957610158611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061021d8773ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610d9b565b858461058b565b9050600367ffffffffffffffff81111561023a5761023961128f565b5b6040519080825280602002602001820160405280156102685781602001602082028036833780820191505090505b50915085826000815181106102805761027f611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff1663569541b96040518163ffffffff1660e01b815260040160206040518083038186803b15801561030057600080fd5b505afa158015610314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103389190610d9b565b8260018151811061034c5761034b611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848260028151811061039b5761039a611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061045f8873ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104589190610d9b565b868561058b565b9050806001825161047091906110d5565b8151811061048157610480611260565b5b6020026020010151826001845161049891906110d5565b815181106104a9576104a8611260565b5b6020026020010151116104e35780600182516104c591906110d5565b815181106104d6576104d5611260565b5b602002602001015161050c565b81600183516104f291906110d5565b8151811061050357610502611260565b5b60200260200101515b9350505050949350505050565b6000806000610528858561070d565b91509150858282604051602001610540929190610f76565b60405160208183030381529060405280519060200120604051602001610567929190610fa2565b6040516020818303038152906040528051906020012060001c925050509392505050565b60606002825110156105c9576040517f20db826700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815167ffffffffffffffff8111156105e4576105e361128f565b5b6040519080825280602002602001820160405280156106125781602001602082028036833780820191505090505b509050828160008151811061062a57610629611260565b5b60200260200101818152505060005b6001835161064791906110d5565b8110156107055760008061069c8786858151811061066857610667611260565b5b60200260200101518760018761067e919061104e565b8151811061068f5761068e611260565b5b6020026020010151610829565b915091506106c58484815181106106b6576106b5611260565b5b6020026020010151838361093b565b846001856106d3919061104e565b815181106106e4576106e3611260565b5b602002602001018181525050505080806106fd9061118b565b915050610639565b509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610776576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106107b05782846107b3565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610822576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008060006108388585610a30565b509050600080610849888888610b4c565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190610e82565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610925578082610928565b81815b8095508196505050505050935093915050565b600080841415610977576040517f098fb56100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314806109865750600082145b156109bd576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109d46103e586610be290919063ffffffff16565b905060006109eb8483610be290919063ffffffff16565b90506000610a1683610a086103e889610be290919063ffffffff16565b610c3e90919063ffffffff16565b90508082610a2491906110a4565b93505050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a99576040517fbd969eb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610ad3578284610ad6565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008373ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401610b89929190610fff565b60206040518083038186803b158015610ba157600080fd5b505afa158015610bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd99190610d9b565b90509392505050565b600080610bf88385610c9a90919063ffffffff16565b809350819250505080610c37576040517f5797276a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b600080610c548385610cee90919063ffffffff16565b809350819250505080610c93576040517fa259879500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b6000806000841415610cb3576001600091509150610ce7565b6000838502905083858281610ccb57610cca611231565b5b0414610cde576000809250925050610ce7565b60018192509250505b9250929050565b6000806000838501905084811015610d0d576000809250925050610d16565b60018192509250505b9250929050565b600081359050610d2c81611322565b92915050565b600081519050610d4181611322565b92915050565b600081359050610d5681611339565b92915050565b600081519050610d6b81611350565b92915050565b600081359050610d8081611367565b92915050565b600081519050610d958161137e565b92915050565b600060208284031215610db157610db06112be565b5b6000610dbf84828501610d32565b91505092915050565b600080600060608486031215610de157610de06112be565b5b6000610def86828701610d1d565b9350506020610e0086828701610d1d565b9250506040610e1186828701610d1d565b9150509250925092565b60008060008060808587031215610e3557610e346112be565b5b6000610e4387828801610d47565b9450506020610e5487828801610d1d565b9350506040610e6587828801610d1d565b9250506060610e7687828801610d71565b91505092959194509250565b600080600060608486031215610e9b57610e9a6112be565b5b6000610ea986828701610d5c565b9350506020610eba86828701610d5c565b9250506040610ecb86828701610d86565b9150509250925092565b610ede81611109565b82525050565b610eed81611109565b82525050565b610f04610eff82611109565b6111d4565b82525050565b610f1b610f168261111b565b6111e6565b82525050565b6000610f2e602083611043565b9150610f39826112d0565b602082019050919050565b6000610f51600183611043565b9150610f5c826112f9565b600182019050919050565b610f7081611171565b82525050565b6000610f828285610ef3565b601482019150610f928284610ef3565b6014820191508190509392505050565b6000610fad82610f44565b9150610fb98285610ef3565b601482019150610fc98284610f0a565b602082019150610fd882610f21565b91508190509392505050565b6000602082019050610ff96000830184610ee4565b92915050565b60006040820190506110146000830185610ed5565b6110216020830184610ed5565b9392505050565b600060208201905061103d6000830184610f67565b92915050565b600081905092915050565b600061105982611171565b915061106483611171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561109957611098611202565b5b828201905092915050565b60006110af82611171565b91506110ba83611171565b9250826110ca576110c9611231565b5b828204905092915050565b60006110e082611171565b91506110eb83611171565b9250828210156110fe576110fd611202565b5b828203905092915050565b600061111482611151565b9050919050565b6000819050919050565b600061113082611109565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600061119682611171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111c9576111c8611202565b5b600182019050919050565b60006111df826111f0565b9050919050565b6000819050919050565b60006111fb826112c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b61132b81611109565b811461133657600080fd5b50565b61134281611125565b811461134d57600080fd5b50565b61135981611137565b811461136457600080fd5b50565b61137081611171565b811461137b57600080fd5b50565b6113878161117b565b811461139257600080fd5b5056fea26469706673582212208c534231e21b804377a0937029aac7257d8e6ff5e9d37ba468c1d4f5bdbdb2b364736f6c63430008070033"; type SwapHelperLibConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/TestSystemContract__factory.ts b/typechain-types/factories/contracts/TestSystemContract__factory.ts index 79207565..a6741a52 100644 --- a/typechain-types/factories/contracts/TestSystemContract__factory.ts +++ b/typechain-types/factories/contracts/TestSystemContract__factory.ts @@ -275,7 +275,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b506040516108833803806108838339818101604052810190610032919061013e565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a15050506101df565b600081519050610138816101c8565b92915050565b600080600060608486031215610157576101566101c3565b5b600061016586828701610129565b935050602061017686828701610129565b925050604061018786828701610129565b9150509250925092565b600061019c826101a3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101d181610191565b81146101dc57600080fd5b50565b610695806101ee6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806397770dff1161006657806397770dff14610134578063a7cb050714610150578063d7fd7afb1461016c578063d936a0121461019c578063ee2815ba146101ba57610093565b80630be1554714610098578063513a9c05146100c8578063569541b9146100f8578063842da36d14610116575b600080fd5b6100b260048036038101906100ad919061049d565b6101d6565b6040516100bf9190610568565b60405180910390f35b6100e260048036038101906100dd919061049d565b610209565b6040516100ef9190610568565b60405180910390f35b61010061023c565b60405161010d9190610568565b60405180910390f35b61011e610262565b60405161012b9190610568565b60405180910390f35b61014e60048036038101906101499190610470565b610288565b005b61016a6004803603810190610165919061050a565b610325565b005b6101866004803603810190610181919061049d565b610379565b6040516101939190610583565b60405180910390f35b6101a4610391565b6040516101b19190610568565b60405180910390f35b6101d460048036038101906101cf91906104ca565b6103b7565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161031a9190610568565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161036d9291906105c7565b60405180910390a15050565b60006020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d828260405161043a92919061059e565b60405180910390a15050565b60008135905061045581610631565b92915050565b60008135905061046a81610648565b92915050565b6000602082840312156104865761048561062c565b5b600061049484828501610446565b91505092915050565b6000602082840312156104b3576104b261062c565b5b60006104c18482850161045b565b91505092915050565b600080604083850312156104e1576104e061062c565b5b60006104ef8582860161045b565b925050602061050085828601610446565b9150509250929050565b600080604083850312156105215761052061062c565b5b600061052f8582860161045b565b92505060206105408582860161045b565b9150509250929050565b610553816105f0565b82525050565b61056281610622565b82525050565b600060208201905061057d600083018461054a565b92915050565b60006020820190506105986000830184610559565b92915050565b60006040820190506105b36000830185610559565b6105c0602083018461054a565b9392505050565b60006040820190506105dc6000830185610559565b6105e96020830184610559565b9392505050565b60006105fb82610602565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b61063a816105f0565b811461064557600080fd5b50565b61065181610622565b811461065c57600080fd5b5056fea26469706673582212204385eb79cbfd3f4c16625b097917df623038e4a25f38987349e8b8396577151064736f6c63430008070033"; + "0x608060405234801561001057600080fd5b506040516108833803806108838339818101604052810190610032919061013e565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a15050506101df565b600081519050610138816101c8565b92915050565b600080600060608486031215610157576101566101c3565b5b600061016586828701610129565b935050602061017686828701610129565b925050604061018786828701610129565b9150509250925092565b600061019c826101a3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101d181610191565b81146101dc57600080fd5b50565b610695806101ee6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806397770dff1161006657806397770dff14610134578063a7cb050714610150578063d7fd7afb1461016c578063d936a0121461019c578063ee2815ba146101ba57610093565b80630be1554714610098578063513a9c05146100c8578063569541b9146100f8578063842da36d14610116575b600080fd5b6100b260048036038101906100ad919061049d565b6101d6565b6040516100bf9190610568565b60405180910390f35b6100e260048036038101906100dd919061049d565b610209565b6040516100ef9190610568565b60405180910390f35b61010061023c565b60405161010d9190610568565b60405180910390f35b61011e610262565b60405161012b9190610568565b60405180910390f35b61014e60048036038101906101499190610470565b610288565b005b61016a6004803603810190610165919061050a565b610325565b005b6101866004803603810190610181919061049d565b610379565b6040516101939190610583565b60405180910390f35b6101a4610391565b6040516101b19190610568565b60405180910390f35b6101d460048036038101906101cf91906104ca565b6103b7565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161031a9190610568565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161036d9291906105c7565b60405180910390a15050565b60006020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d828260405161043a92919061059e565b60405180910390a15050565b60008135905061045581610631565b92915050565b60008135905061046a81610648565b92915050565b6000602082840312156104865761048561062c565b5b600061049484828501610446565b91505092915050565b6000602082840312156104b3576104b261062c565b5b60006104c18482850161045b565b91505092915050565b600080604083850312156104e1576104e061062c565b5b60006104ef8582860161045b565b925050602061050085828601610446565b9150509250929050565b600080604083850312156105215761052061062c565b5b600061052f8582860161045b565b92505060206105408582860161045b565b9150509250929050565b610553816105f0565b82525050565b61056281610622565b82525050565b600060208201905061057d600083018461054a565b92915050565b60006020820190506105986000830184610559565b92915050565b60006040820190506105b36000830185610559565b6105c0602083018461054a565b9392505050565b60006040820190506105dc6000830185610559565b6105e96020830184610559565b9392505050565b60006105fb82610602565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b61063a816105f0565b811461064557600080fd5b50565b61065181610622565b811461065c57600080fd5b5056fea2646970667358221220a1a8cb0b617405d12a7b7c247a427667c2183e2cbf33b3cb5d310d6116c7e40064736f6c63430008070033"; type TestSystemContractConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/shared/MockSystemContract.sol/MockSystemContract__factory.ts b/typechain-types/factories/contracts/shared/MockSystemContract.sol/MockSystemContract__factory.ts index 7da39e7b..28c2c4fd 100644 --- a/typechain-types/factories/contracts/shared/MockSystemContract.sol/MockSystemContract__factory.ts +++ b/typechain-types/factories/contracts/shared/MockSystemContract.sol/MockSystemContract__factory.ts @@ -342,7 +342,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b506040516200113f3803806200113f833981810160405281019062000037919062000132565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a1505050620001e1565b6000815190506200012c81620001c7565b92915050565b6000806000606084860312156200014e576200014d620001c2565b5b60006200015e868287016200011b565b935050602062000171868287016200011b565b925050604062000184868287016200011b565b9150509250925092565b60006200019b82620001a2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001d2816200018e565b8114620001de57600080fd5b50565b60805160601c60a05160601c610f326200020d6000396000610465015260006106040152610f326000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397770dff1161007157806397770dff14610166578063a7cb050714610182578063c63585cc1461019e578063d7fd7afb146101ce578063d936a012146101fe578063ee2815ba1461021c576100a9565b80630be15547146100ae578063513a9c05146100de578063569541b91461010e578063762aa5ca1461012c578063842da36d14610148575b600080fd5b6100c860048036038101906100c39190610913565b610238565b6040516100d59190610c2e565b60405180910390f35b6100f860048036038101906100f39190610913565b61026b565b6040516101059190610c2e565b60405180910390f35b61011661029e565b6040516101239190610c2e565b60405180910390f35b61014660048036038101906101419190610980565b6102c4565b005b610150610463565b60405161015d9190610c2e565b60405180910390f35b610180600480360381019061017b9190610866565b610487565b005b61019c60048036038101906101979190610a1a565b610524565b005b6101b860048036038101906101b39190610893565b610578565b6040516101c59190610c2e565b60405180910390f35b6101e860048036038101906101e39190610913565b6105ea565b6040516101f59190610cc7565b60405180910390f35b610206610602565b6040516102139190610c2e565b60405180910390f35b61023660048036038101906102319190610940565b610626565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000336040516020016102d79190610c2e565b6040516020818303038152906040529050600060405180606001604052808381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200189815250905060008673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89886040518363ffffffff1660e01b815260040161035a929190610c49565b602060405180830381600087803b15801561037457600080fd5b505af1158015610388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ac91906108e6565b9050806103e5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff1663de43156e83898989896040518663ffffffff1660e01b8152600401610426959493929190610c72565b600060405180830381600087803b15801561044057600080fd5b505af1158015610454573d6000803e3d6000fd5b50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516105199190610c2e565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161056c929190610d0b565b60405180910390a15050565b600080600061058785856106b5565b9150915085828260405160200161059f929190610bc0565b604051602081830303815290604052805190602001206040516020016105c6929190610bec565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d82826040516106a9929190610ce2565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561071e576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061075857828461075b565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107ca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b6000813590506107e081610eb7565b92915050565b6000815190506107f581610ece565b92915050565b60008083601f84011261081157610810610e33565b5b8235905067ffffffffffffffff81111561082e5761082d610e2e565b5b60208301915083600182028301111561084a57610849610e38565b5b9250929050565b60008135905061086081610ee5565b92915050565b60006020828403121561087c5761087b610e42565b5b600061088a848285016107d1565b91505092915050565b6000806000606084860312156108ac576108ab610e42565b5b60006108ba868287016107d1565b93505060206108cb868287016107d1565b92505060406108dc868287016107d1565b9150509250925092565b6000602082840312156108fc576108fb610e42565b5b600061090a848285016107e6565b91505092915050565b60006020828403121561092957610928610e42565b5b600061093784828501610851565b91505092915050565b6000806040838503121561095757610956610e42565b5b600061096585828601610851565b9250506020610976858286016107d1565b9150509250929050565b60008060008060008060a0878903121561099d5761099c610e42565b5b60006109ab89828a01610851565b96505060206109bc89828a016107d1565b95505060406109cd89828a016107d1565b94505060606109de89828a01610851565b935050608087013567ffffffffffffffff8111156109ff576109fe610e3d565b5b610a0b89828a016107fb565b92509250509295509295509295565b60008060408385031215610a3157610a30610e42565b5b6000610a3f85828601610851565b9250506020610a5085828601610851565b9150509250929050565b610a6381610d6c565b82525050565b610a7281610d6c565b82525050565b610a89610a8482610d6c565b610e00565b82525050565b610aa0610a9b82610d8a565b610e12565b82525050565b6000610ab28385610d50565b9350610abf838584610dbe565b610ac883610e47565b840190509392505050565b6000610ade82610d34565b610ae88185610d3f565b9350610af8818560208601610dcd565b610b0181610e47565b840191505092915050565b6000610b19602083610d61565b9150610b2482610e65565b602082019050919050565b6000610b3c600183610d61565b9150610b4782610e8e565b600182019050919050565b60006060830160008301518482036000860152610b6f8282610ad3565b9150506020830151610b846020860182610a5a565b506040830151610b976040860182610ba2565b508091505092915050565b610bab81610db4565b82525050565b610bba81610db4565b82525050565b6000610bcc8285610a78565b601482019150610bdc8284610a78565b6014820191508190509392505050565b6000610bf782610b2f565b9150610c038285610a78565b601482019150610c138284610a8f565b602082019150610c2282610b0c565b91508190509392505050565b6000602082019050610c436000830184610a69565b92915050565b6000604082019050610c5e6000830185610a69565b610c6b6020830184610bb1565b9392505050565b60006080820190508181036000830152610c8c8188610b52565b9050610c9b6020830187610a69565b610ca86040830186610bb1565b8181036060830152610cbb818486610aa6565b90509695505050505050565b6000602082019050610cdc6000830184610bb1565b92915050565b6000604082019050610cf76000830185610bb1565b610d046020830184610a69565b9392505050565b6000604082019050610d206000830185610bb1565b610d2d6020830184610bb1565b9392505050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000610d7782610d94565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610deb578082015181840152602081019050610dd0565b83811115610dfa576000848401525b50505050565b6000610e0b82610e1c565b9050919050565b6000819050919050565b6000610e2782610e58565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b610ec081610d6c565b8114610ecb57600080fd5b50565b610ed781610d7e565b8114610ee257600080fd5b50565b610eee81610db4565b8114610ef957600080fd5b5056fea2646970667358221220ba1a521952cb95876734a993329f855a42f4f47a0c5a23d603f1d961d4dcbe4c64736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b506040516200113f3803806200113f833981810160405281019062000037919062000132565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a1505050620001e1565b6000815190506200012c81620001c7565b92915050565b6000806000606084860312156200014e576200014d620001c2565b5b60006200015e868287016200011b565b935050602062000171868287016200011b565b925050604062000184868287016200011b565b9150509250925092565b60006200019b82620001a2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001d2816200018e565b8114620001de57600080fd5b50565b60805160601c60a05160601c610f326200020d6000396000610465015260006106040152610f326000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397770dff1161007157806397770dff14610166578063a7cb050714610182578063c63585cc1461019e578063d7fd7afb146101ce578063d936a012146101fe578063ee2815ba1461021c576100a9565b80630be15547146100ae578063513a9c05146100de578063569541b91461010e578063762aa5ca1461012c578063842da36d14610148575b600080fd5b6100c860048036038101906100c39190610913565b610238565b6040516100d59190610c2e565b60405180910390f35b6100f860048036038101906100f39190610913565b61026b565b6040516101059190610c2e565b60405180910390f35b61011661029e565b6040516101239190610c2e565b60405180910390f35b61014660048036038101906101419190610980565b6102c4565b005b610150610463565b60405161015d9190610c2e565b60405180910390f35b610180600480360381019061017b9190610866565b610487565b005b61019c60048036038101906101979190610a1a565b610524565b005b6101b860048036038101906101b39190610893565b610578565b6040516101c59190610c2e565b60405180910390f35b6101e860048036038101906101e39190610913565b6105ea565b6040516101f59190610cc7565b60405180910390f35b610206610602565b6040516102139190610c2e565b60405180910390f35b61023660048036038101906102319190610940565b610626565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000336040516020016102d79190610c2e565b6040516020818303038152906040529050600060405180606001604052808381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200189815250905060008673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89886040518363ffffffff1660e01b815260040161035a929190610c49565b602060405180830381600087803b15801561037457600080fd5b505af1158015610388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ac91906108e6565b9050806103e5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff1663de43156e83898989896040518663ffffffff1660e01b8152600401610426959493929190610c72565b600060405180830381600087803b15801561044057600080fd5b505af1158015610454573d6000803e3d6000fd5b50505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516105199190610c2e565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161056c929190610d0b565b60405180910390a15050565b600080600061058785856106b5565b9150915085828260405160200161059f929190610bc0565b604051602081830303815290604052805190602001206040516020016105c6929190610bec565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d82826040516106a9929190610ce2565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561071e576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061075857828461075b565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107ca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b6000813590506107e081610eb7565b92915050565b6000815190506107f581610ece565b92915050565b60008083601f84011261081157610810610e33565b5b8235905067ffffffffffffffff81111561082e5761082d610e2e565b5b60208301915083600182028301111561084a57610849610e38565b5b9250929050565b60008135905061086081610ee5565b92915050565b60006020828403121561087c5761087b610e42565b5b600061088a848285016107d1565b91505092915050565b6000806000606084860312156108ac576108ab610e42565b5b60006108ba868287016107d1565b93505060206108cb868287016107d1565b92505060406108dc868287016107d1565b9150509250925092565b6000602082840312156108fc576108fb610e42565b5b600061090a848285016107e6565b91505092915050565b60006020828403121561092957610928610e42565b5b600061093784828501610851565b91505092915050565b6000806040838503121561095757610956610e42565b5b600061096585828601610851565b9250506020610976858286016107d1565b9150509250929050565b60008060008060008060a0878903121561099d5761099c610e42565b5b60006109ab89828a01610851565b96505060206109bc89828a016107d1565b95505060406109cd89828a016107d1565b94505060606109de89828a01610851565b935050608087013567ffffffffffffffff8111156109ff576109fe610e3d565b5b610a0b89828a016107fb565b92509250509295509295509295565b60008060408385031215610a3157610a30610e42565b5b6000610a3f85828601610851565b9250506020610a5085828601610851565b9150509250929050565b610a6381610d6c565b82525050565b610a7281610d6c565b82525050565b610a89610a8482610d6c565b610e00565b82525050565b610aa0610a9b82610d8a565b610e12565b82525050565b6000610ab28385610d50565b9350610abf838584610dbe565b610ac883610e47565b840190509392505050565b6000610ade82610d34565b610ae88185610d3f565b9350610af8818560208601610dcd565b610b0181610e47565b840191505092915050565b6000610b19602083610d61565b9150610b2482610e65565b602082019050919050565b6000610b3c600183610d61565b9150610b4782610e8e565b600182019050919050565b60006060830160008301518482036000860152610b6f8282610ad3565b9150506020830151610b846020860182610a5a565b506040830151610b976040860182610ba2565b508091505092915050565b610bab81610db4565b82525050565b610bba81610db4565b82525050565b6000610bcc8285610a78565b601482019150610bdc8284610a78565b6014820191508190509392505050565b6000610bf782610b2f565b9150610c038285610a78565b601482019150610c138284610a8f565b602082019150610c2282610b0c565b91508190509392505050565b6000602082019050610c436000830184610a69565b92915050565b6000604082019050610c5e6000830185610a69565b610c6b6020830184610bb1565b9392505050565b60006080820190508181036000830152610c8c8188610b52565b9050610c9b6020830187610a69565b610ca86040830186610bb1565b8181036060830152610cbb818486610aa6565b90509695505050505050565b6000602082019050610cdc6000830184610bb1565b92915050565b6000604082019050610cf76000830185610bb1565b610d046020830184610a69565b9392505050565b6000604082019050610d206000830185610bb1565b610d2d6020830184610bb1565b9392505050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000610d7782610d94565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610deb578082015181840152602081019050610dd0565b83811115610dfa576000848401525b50505050565b6000610e0b82610e1c565b9050919050565b6000819050919050565b6000610e2782610e58565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b610ec081610d6c565b8114610ecb57600080fd5b50565b610ed781610d7e565b8114610ee257600080fd5b50565b610eee81610db4565b8114610ef957600080fd5b5056fea2646970667358221220a2ac3540b1f1ed82c5a0f0f0820653355bf2f21b61e6ec081500d78cf85e5c3364736f6c63430008070033"; type MockSystemContractConstructorParams = | [signer?: Signer] diff --git a/typechain-types/hardhat.d.ts b/typechain-types/hardhat.d.ts index b35a9552..f351a8c7 100644 --- a/typechain-types/hardhat.d.ts +++ b/typechain-types/hardhat.d.ts @@ -96,6 +96,18 @@ declare module "hardhat/types/runtime" { name: "IZRC20", signerOrOptions?: ethers.Signer | FactoryOptions ): Promise; + getContractFactory( + name: "IZRC20Metadata", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "ZRC20Events", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "UniversalContract", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; getContractFactory( name: "ZContract", signerOrOptions?: ethers.Signer | FactoryOptions @@ -278,6 +290,21 @@ declare module "hardhat/types/runtime" { address: string, signer?: ethers.Signer ): Promise; + getContractAt( + name: "IZRC20Metadata", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "ZRC20Events", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "UniversalContract", + address: string, + signer?: ethers.Signer + ): Promise; getContractAt( name: "ZContract", address: string, diff --git a/typechain-types/index.ts b/typechain-types/index.ts index 08dfa371..02c80d0a 100644 --- a/typechain-types/index.ts +++ b/typechain-types/index.ts @@ -46,10 +46,16 @@ export type { ZetaReceiver } from "./@zetachain/protocol-contracts/contracts/evm export { ZetaReceiver__factory } from "./factories/@zetachain/protocol-contracts/contracts/evm/interfaces/ZetaInterfaces.sol/ZetaReceiver__factory"; export type { ZetaTokenConsumer } from "./@zetachain/protocol-contracts/contracts/evm/interfaces/ZetaInterfaces.sol/ZetaTokenConsumer"; export { ZetaTokenConsumer__factory } from "./factories/@zetachain/protocol-contracts/contracts/evm/interfaces/ZetaInterfaces.sol/ZetaTokenConsumer__factory"; -export type { IZRC20 } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20"; -export { IZRC20__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20__factory"; -export type { ZContract } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract"; -export { ZContract__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/ZContract__factory"; +export type { IZRC20 } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20"; +export { IZRC20__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20__factory"; +export type { IZRC20Metadata } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata"; +export { IZRC20Metadata__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata__factory"; +export type { ZRC20Events } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events"; +export { ZRC20Events__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events__factory"; +export type { UniversalContract } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract"; +export { UniversalContract__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract__factory"; +export type { ZContract } from "./@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract"; +export { ZContract__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract__factory"; export type { SystemContract } from "./@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContract"; export { SystemContract__factory } from "./factories/@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContract__factory"; export type { SystemContractErrors } from "./@zetachain/protocol-contracts/contracts/zevm/SystemContract.sol/SystemContractErrors"; From 47831644b599debfc54f7d0236c0217b52c4c70b Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 17:17:30 +0900 Subject: [PATCH 09/18] lint --- contracts/SwapHelperLib.sol | 34 +++++++++++++++---- packages/client/src/client.ts | 2 +- packages/client/src/index.ts | 2 +- packages/client/src/solanaDeposit.ts | 7 ++-- packages/tasks/src/evmCall.ts | 10 +++--- packages/tasks/src/evmDeposit.ts | 12 ++++--- packages/tasks/src/evmDepositAndCall.ts | 12 ++++--- packages/tasks/src/index.ts | 6 ++-- packages/tasks/src/solanaDeposit.ts | 3 +- packages/tasks/src/zetachainCall.ts | 10 +++--- packages/tasks/src/zetachainWithdraw.ts | 10 +++--- .../tasks/src/zetachainWithdrawAndCall.ts | 10 +++--- 12 files changed, 76 insertions(+), 42 deletions(-) diff --git a/contracts/SwapHelperLib.sol b/contracts/SwapHelperLib.sol index 7c5d2b2e..a1eadd74 100644 --- a/contracts/SwapHelperLib.sol +++ b/contracts/SwapHelperLib.sol @@ -103,7 +103,11 @@ library SwapHelperLib { if (!existsPairPool) { return false; } - uint256[] memory amounts = UniswapV2Library.getAmountsOut(uniswapV2Factory, amountIn, path); + uint256[] memory amounts = UniswapV2Library.getAmountsOut( + uniswapV2Factory, + amountIn, + path + ); return amounts[amounts.length - 1] >= minAmountOut; } @@ -114,7 +118,6 @@ library SwapHelperLib { address targetZRC20, uint256 minAmountOut ) internal returns (uint256) { - address[] memory path; path = new address[](2); path[0] = zrc20; @@ -127,7 +130,8 @@ library SwapHelperLib { path ); - bool isZETA = targetZRC20 == systemContract.wZetaContractAddress() || zrc20 == systemContract.wZetaContractAddress(); + bool isZETA = targetZRC20 == systemContract.wZetaContractAddress() || + zrc20 == systemContract.wZetaContractAddress(); if (!isSufficientLiquidity && !isZETA) { path = new address[](3); @@ -234,20 +238,36 @@ library SwapHelperLib { return amounts[0]; } - function getMinOutAmount(SystemContract systemContract, address zrc20, address target, uint256 amountIn) public view returns (uint256 minOutAmount) { + function getMinOutAmount( + SystemContract systemContract, + address zrc20, + address target, + uint256 amountIn + ) public view returns (uint256 minOutAmount) { address[] memory path; path = new address[](2); path[0] = zrc20; path[1] = target; - uint[] memory amounts1 = UniswapV2Library.getAmountsOut(systemContract.uniswapv2FactoryAddress(), amountIn, path); + uint[] memory amounts1 = UniswapV2Library.getAmountsOut( + systemContract.uniswapv2FactoryAddress(), + amountIn, + path + ); path = new address[](3); path[0] = zrc20; path[1] = systemContract.wZetaContractAddress(); path[2] = target; - uint[] memory amounts2 = UniswapV2Library.getAmountsOut(systemContract.uniswapv2FactoryAddress(), amountIn, path); + uint[] memory amounts2 = UniswapV2Library.getAmountsOut( + systemContract.uniswapv2FactoryAddress(), + amountIn, + path + ); - minOutAmount = amounts1[amounts1.length - 1] > amounts2[amounts2.length - 1] ? amounts1[amounts1.length - 1] : amounts2[amounts2.length - 1]; + minOutAmount = amounts1[amounts1.length - 1] > + amounts2[amounts2.length - 1] + ? amounts1[amounts1.length - 1] + : amounts2[amounts2.length - 1]; } } diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index f9e7bb61..f5765fd9 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -17,9 +17,9 @@ import { getZRC20FromERC20, getZRC20GasToken, sendZeta, + solanaDeposit, trackCCTX, withdraw, - solanaDeposit, } from "."; export interface ZetaChainClientParamsBase { diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 3f510f06..accb0f2b 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -11,6 +11,6 @@ export * from "./getQuote"; export * from "./getSupportedChains"; export * from "./prepareData"; export * from "./sendZeta"; +export * from "./solanaDeposit"; export * from "./trackCCTX"; export * from "./withdraw"; -export * from "./solanaDeposit"; diff --git a/packages/client/src/solanaDeposit.ts b/packages/client/src/solanaDeposit.ts index 2bab252f..c2df7d4e 100644 --- a/packages/client/src/solanaDeposit.ts +++ b/packages/client/src/solanaDeposit.ts @@ -1,9 +1,10 @@ import * as anchor from "@coral-xyz/anchor"; -import Gateway_IDL from "./idl/gateway.json"; -import { ZetaChainClient } from "./client"; import { Keypair } from "@solana/web3.js"; import { ethers } from "ethers"; +import { ZetaChainClient } from "./client"; +import Gateway_IDL from "./idl/gateway.json"; + const SEED = "meta"; export const solanaDeposit = async function ( @@ -11,9 +12,9 @@ export const solanaDeposit = async function ( args: { amount: number; api: string; - recipient: string; idPath: string; params: any[]; + recipient: string; } ) { const keypair = await getKeypairFromFile(args.idPath); diff --git a/packages/tasks/src/evmCall.ts b/packages/tasks/src/evmCall.ts index 25c23cfa..01ee363d 100644 --- a/packages/tasks/src/evmCall.ts +++ b/packages/tasks/src/evmCall.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { @@ -24,15 +25,16 @@ export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { args.receiver, encodedParameters, { - revertAddress: args.revertAddress, + abortAddress: "0x0000000000000000000000000000000000000000", callOnRevert: args.callOnRevert, - abortAddress: "0x0000000000000000000000000000000000000000", // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }, { - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, } ); const receipt = await tx.wait(); diff --git a/packages/tasks/src/evmDeposit.ts b/packages/tasks/src/evmDeposit.ts index 4e092535..b5668f56 100644 --- a/packages/tasks/src/evmDeposit.ts +++ b/packages/tasks/src/evmDeposit.ts @@ -1,7 +1,8 @@ +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; -import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { const [signer] = await hre.ethers.getSigners(); @@ -14,16 +15,17 @@ export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { ); const revertOptions = { - revertAddress: args.revertAddress, + abortAddress: "0x0000000000000000000000000000000000000000", callOnRevert: args.callOnRevert, - abortAddress: "0x0000000000000000000000000000000000000000", // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }; const txOptions = { - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, }; try { diff --git a/packages/tasks/src/evmDepositAndCall.ts b/packages/tasks/src/evmDepositAndCall.ts index 7e0ee502..e6df98b3 100644 --- a/packages/tasks/src/evmDepositAndCall.ts +++ b/packages/tasks/src/evmDepositAndCall.ts @@ -1,7 +1,8 @@ +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; -import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; export const evmDepositAndCall = async ( args: any, @@ -17,16 +18,17 @@ export const evmDepositAndCall = async ( ); const revertOptions = { - revertAddress: args.revertAddress, + abortAddress: "0x0000000000000000000000000000000000000000", callOnRevert: args.callOnRevert, - abortAddress: "0x0000000000000000000000000000000000000000", // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }; const txOptions = { - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, }; const encodedParameters = utils.defaultAbiCoder.encode( diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index b3c05928..bb01e1fc 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -10,12 +10,12 @@ export { poolsTask } from "./pools"; export { sendBTCTask } from "./sendBTC"; export { sendZETATask } from "./sendZETA"; // export { verifyTask } from "./verify"; -export { tokensTask } from "./tokens"; -export { withdrawTask } from "./withdraw"; export { evmCall } from "./evmCall"; export { evmDeposit } from "./evmDeposit"; export { evmDepositAndCall } from "./evmDepositAndCall"; +export { solanaDeposit } from "./solanaDeposit"; +export { tokensTask } from "./tokens"; +export { withdrawTask } from "./withdraw"; export { zetachainCall } from "./zetachainCall"; export { zetachainWithdraw } from "./zetachainWithdraw"; export { zetachainWithdrawAndCall } from "./zetachainWithdrawAndCall"; -export { solanaDeposit } from "./solanaDeposit"; diff --git a/packages/tasks/src/solanaDeposit.ts b/packages/tasks/src/solanaDeposit.ts index f9d2f759..8c99b529 100644 --- a/packages/tasks/src/solanaDeposit.ts +++ b/packages/tasks/src/solanaDeposit.ts @@ -2,6 +2,7 @@ import bech32 from "bech32"; import { utils } from "ethers"; import { task } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import { ZetaChainClient } from "../../client/src"; export const solanaDeposit = async ( @@ -22,7 +23,7 @@ export const solanaDeposit = async ( } const { amount, api, idPath } = args; const params = [JSON.parse(args.types), args.values]; - await client.solanaDeposit({ amount, api, recipient, idPath, params }); + await client.solanaDeposit({ amount, api, idPath, params, recipient }); }; task("solana-deposit", "Solana deposit", solanaDeposit) diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index 414dd01d..76c5d451 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; @@ -18,16 +19,17 @@ export const zetachainCall = async ( ); const revertOptions = { - revertAddress: args.revertAddress, + abortAddress: "0x0000000000000000000000000000000000000000", callOnRevert: args.callOnRevert, - abortAddress: "0x0000000000000000000000000000000000000000", // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }; const txOptions = { - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, }; const functionSignature = utils.id(args.function).slice(0, 10); diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts index ca248d00..4996b88c 100644 --- a/packages/tasks/src/zetachainWithdraw.ts +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; @@ -17,16 +18,17 @@ export const zetachainWithdraw = async ( ); const revertOptions = { - revertAddress: args.revertAddress, + abortAddress: "0x0000000000000000000000000000000000000000", callOnRevert: args.callOnRevert, - abortAddress: "0x0000000000000000000000000000000000000000", // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }; const txOptions = { - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, }; try { diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts index 6985e463..81a19d80 100644 --- a/packages/tasks/src/zetachainWithdrawAndCall.ts +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; @@ -17,16 +18,17 @@ export const zetachainWithdrawAndCall = async ( ); const revertOptions = { - revertAddress: args.revertAddress, + abortAddress: "0x0000000000000000000000000000000000000000", callOnRevert: args.callOnRevert, - abortAddress: "0x0000000000000000000000000000000000000000", // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }; const txOptions = { - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, }; const functionSignature = utils.id(args.function).slice(0, 10); From 8acb4bc7f769dc7c1cbf3afc8c154443acfefb8f Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 17:17:37 +0900 Subject: [PATCH 10/18] lint --- .../zevm/interfaces/IZRC20.sol/IZRC20.ts | 432 ++++++++++++++++ .../interfaces/IZRC20.sol/IZRC20Metadata.ts | 474 ++++++++++++++++++ .../zevm/interfaces/IZRC20.sol/ZRC20Events.ts | 219 ++++++++ .../zevm/interfaces/IZRC20.sol/index.ts | 6 + .../zContract.sol/UniversalContract.ts | 203 ++++++++ .../interfaces/zContract.sol/ZContract.ts | 138 +++++ .../zevm/interfaces/zContract.sol/index.ts | 5 + .../IZRC20.sol/IZRC20Metadata__factory.ts | 296 +++++++++++ .../interfaces/IZRC20.sol/IZRC20__factory.ts | 254 ++++++++++ .../IZRC20.sol/ZRC20Events__factory.ts | 177 +++++++ .../zevm/interfaces/IZRC20.sol/index.ts | 6 + .../UniversalContract__factory.ts | 116 +++++ .../zContract.sol/ZContract__factory.ts | 71 +++ .../zevm/interfaces/zContract.sol/index.ts | 5 + 14 files changed, 2402 insertions(+) create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20.ts create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata.ts create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events.ts create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract.ts create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract.ts create mode 100644 typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata__factory.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20__factory.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events__factory.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract__factory.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract__factory.ts create mode 100644 typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20.ts new file mode 100644 index 00000000..e21571a8 --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20.ts @@ -0,0 +1,432 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../common"; + +export interface IZRC20Interface extends utils.Interface { + functions: { + "PROTOCOL_FLAT_FEE()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "burn(uint256)": FunctionFragment; + "deposit(address,uint256)": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "withdraw(bytes,uint256)": FunctionFragment; + "withdrawGasFee()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "PROTOCOL_FLAT_FEE" + | "allowance" + | "approve" + | "balanceOf" + | "burn" + | "deposit" + | "totalSupply" + | "transfer" + | "transferFrom" + | "withdraw" + | "withdrawGasFee" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "PROTOCOL_FLAT_FEE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "burn", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "deposit", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawGasFee", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "PROTOCOL_FLAT_FEE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawGasFee", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IZRC20 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IZRC20Interface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise<[BigNumber]>; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; + }; + + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; + + callStatic: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; + }; + + filters: {}; + + estimateGas: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise; + }; +} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata.ts new file mode 100644 index 00000000..1ee53182 --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata.ts @@ -0,0 +1,474 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../common"; + +export interface IZRC20MetadataInterface extends utils.Interface { + functions: { + "PROTOCOL_FLAT_FEE()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "burn(uint256)": FunctionFragment; + "decimals()": FunctionFragment; + "deposit(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "withdraw(bytes,uint256)": FunctionFragment; + "withdrawGasFee()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "PROTOCOL_FLAT_FEE" + | "allowance" + | "approve" + | "balanceOf" + | "burn" + | "decimals" + | "deposit" + | "name" + | "symbol" + | "totalSupply" + | "transfer" + | "transferFrom" + | "withdraw" + | "withdrawGasFee" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "PROTOCOL_FLAT_FEE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "burn", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData( + functionFragment: "deposit", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawGasFee", + values?: undefined + ): string; + + decodeFunctionResult( + functionFragment: "PROTOCOL_FLAT_FEE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "withdrawGasFee", + data: BytesLike + ): Result; + + events: {}; +} + +export interface IZRC20Metadata extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: IZRC20MetadataInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise<[BigNumber]>; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + decimals(overrides?: CallOverrides): Promise<[number]>; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise<[string]>; + + symbol(overrides?: CallOverrides): Promise<[string]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; + }; + + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; + + callStatic: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise<[string, BigNumber]>; + }; + + filters: {}; + + estimateGas: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + PROTOCOL_FLAT_FEE(overrides?: CallOverrides): Promise; + + allowance( + owner: PromiseOrValue, + spender: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approve( + spender: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + balanceOf( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + burn( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + decimals(overrides?: CallOverrides): Promise; + + deposit( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + symbol(overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferFrom( + sender: PromiseOrValue, + recipient: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdraw( + to: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + withdrawGasFee(overrides?: CallOverrides): Promise; + }; +} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events.ts new file mode 100644 index 00000000..9baca34a --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events.ts @@ -0,0 +1,219 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, BigNumber, Signer, utils } from "ethers"; +import type { EventFragment } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../common"; + +export interface ZRC20EventsInterface extends utils.Interface { + functions: {}; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Deposit(bytes,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + "UpdatedGasLimit(uint256)": EventFragment; + "UpdatedProtocolFlatFee(uint256)": EventFragment; + "UpdatedSystemContract(address)": EventFragment; + "Withdrawal(address,bytes,uint256,uint256,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdatedGasLimit"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdatedProtocolFlatFee"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdatedSystemContract"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdrawal"): EventFragment; +} + +export interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber; +} +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber], + ApprovalEventObject +>; + +export type ApprovalEventFilter = TypedEventFilter; + +export interface DepositEventObject { + from: string; + to: string; + value: BigNumber; +} +export type DepositEvent = TypedEvent< + [string, string, BigNumber], + DepositEventObject +>; + +export type DepositEventFilter = TypedEventFilter; + +export interface TransferEventObject { + from: string; + to: string; + value: BigNumber; +} +export type TransferEvent = TypedEvent< + [string, string, BigNumber], + TransferEventObject +>; + +export type TransferEventFilter = TypedEventFilter; + +export interface UpdatedGasLimitEventObject { + gasLimit: BigNumber; +} +export type UpdatedGasLimitEvent = TypedEvent< + [BigNumber], + UpdatedGasLimitEventObject +>; + +export type UpdatedGasLimitEventFilter = TypedEventFilter; + +export interface UpdatedProtocolFlatFeeEventObject { + protocolFlatFee: BigNumber; +} +export type UpdatedProtocolFlatFeeEvent = TypedEvent< + [BigNumber], + UpdatedProtocolFlatFeeEventObject +>; + +export type UpdatedProtocolFlatFeeEventFilter = + TypedEventFilter; + +export interface UpdatedSystemContractEventObject { + systemContract: string; +} +export type UpdatedSystemContractEvent = TypedEvent< + [string], + UpdatedSystemContractEventObject +>; + +export type UpdatedSystemContractEventFilter = + TypedEventFilter; + +export interface WithdrawalEventObject { + from: string; + to: string; + value: BigNumber; + gasFee: BigNumber; + protocolFlatFee: BigNumber; +} +export type WithdrawalEvent = TypedEvent< + [string, string, BigNumber, BigNumber, BigNumber], + WithdrawalEventObject +>; + +export type WithdrawalEventFilter = TypedEventFilter; + +export interface ZRC20Events extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ZRC20EventsInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: {}; + + callStatic: {}; + + filters: { + "Approval(address,address,uint256)"( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + Approval( + owner?: PromiseOrValue | null, + spender?: PromiseOrValue | null, + value?: null + ): ApprovalEventFilter; + + "Deposit(bytes,address,uint256)"( + from?: null, + to?: PromiseOrValue | null, + value?: null + ): DepositEventFilter; + Deposit( + from?: null, + to?: PromiseOrValue | null, + value?: null + ): DepositEventFilter; + + "Transfer(address,address,uint256)"( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + Transfer( + from?: PromiseOrValue | null, + to?: PromiseOrValue | null, + value?: null + ): TransferEventFilter; + + "UpdatedGasLimit(uint256)"(gasLimit?: null): UpdatedGasLimitEventFilter; + UpdatedGasLimit(gasLimit?: null): UpdatedGasLimitEventFilter; + + "UpdatedProtocolFlatFee(uint256)"( + protocolFlatFee?: null + ): UpdatedProtocolFlatFeeEventFilter; + UpdatedProtocolFlatFee( + protocolFlatFee?: null + ): UpdatedProtocolFlatFeeEventFilter; + + "UpdatedSystemContract(address)"( + systemContract?: null + ): UpdatedSystemContractEventFilter; + UpdatedSystemContract( + systemContract?: null + ): UpdatedSystemContractEventFilter; + + "Withdrawal(address,bytes,uint256,uint256,uint256)"( + from?: PromiseOrValue | null, + to?: null, + value?: null, + gasFee?: null, + protocolFlatFee?: null + ): WithdrawalEventFilter; + Withdrawal( + from?: PromiseOrValue | null, + to?: null, + value?: null, + gasFee?: null, + protocolFlatFee?: null + ): WithdrawalEventFilter; + }; + + estimateGas: {}; + + populateTransaction: {}; +} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts new file mode 100644 index 00000000..603ef6e3 --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IZRC20 } from "./IZRC20"; +export type { IZRC20Metadata } from "./IZRC20Metadata"; +export type { ZRC20Events } from "./ZRC20Events"; diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract.ts new file mode 100644 index 00000000..4cd9621b --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract.ts @@ -0,0 +1,203 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../common"; + +export type ZContextStruct = { + origin: PromiseOrValue; + sender: PromiseOrValue; + chainID: PromiseOrValue; +}; + +export type ZContextStructOutput = [string, string, BigNumber] & { + origin: string; + sender: string; + chainID: BigNumber; +}; + +export type RevertContextStruct = { + origin: PromiseOrValue; + sender: PromiseOrValue; + chainID: PromiseOrValue; +}; + +export type RevertContextStructOutput = [string, string, BigNumber] & { + origin: string; + sender: string; + chainID: BigNumber; +}; + +export interface UniversalContractInterface extends utils.Interface { + functions: { + "onCrossChainCall((bytes,address,uint256),address,uint256,bytes)": FunctionFragment; + "onRevert((bytes,address,uint256),address,uint256,bytes)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "onCrossChainCall" | "onRevert" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "onCrossChainCall", + values: [ + ZContextStruct, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "onRevert", + values: [ + RevertContextStruct, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "onCrossChainCall", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "onRevert", data: BytesLike): Result; + + events: {}; +} + +export interface UniversalContract extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: UniversalContractInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onRevert( + context: RevertContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onRevert( + context: RevertContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + onRevert( + context: RevertContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onRevert( + context: RevertContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + onRevert( + context: RevertContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract.ts new file mode 100644 index 00000000..8cf4c0ba --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract.ts @@ -0,0 +1,138 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../../../../../../common"; + +export type ZContextStruct = { + origin: PromiseOrValue; + sender: PromiseOrValue; + chainID: PromiseOrValue; +}; + +export type ZContextStructOutput = [string, string, BigNumber] & { + origin: string; + sender: string; + chainID: BigNumber; +}; + +export interface ZContractInterface extends utils.Interface { + functions: { + "onCrossChainCall((bytes,address,uint256),address,uint256,bytes)": FunctionFragment; + }; + + getFunction(nameOrSignatureOrTopic: "onCrossChainCall"): FunctionFragment; + + encodeFunctionData( + functionFragment: "onCrossChainCall", + values: [ + ZContextStruct, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult( + functionFragment: "onCrossChainCall", + data: BytesLike + ): Result; + + events: {}; +} + +export interface ZContract extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ZContractInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + onCrossChainCall( + context: ZContextStruct, + zrc20: PromiseOrValue, + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts new file mode 100644 index 00000000..bf8e5a02 --- /dev/null +++ b/typechain-types/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { UniversalContract } from "./UniversalContract"; +export type { ZContract } from "./ZContract"; diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata__factory.ts new file mode 100644 index 00000000..00883d9e --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata__factory.ts @@ -0,0 +1,296 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IZRC20Metadata, + IZRC20MetadataInterface, +} from "../../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20Metadata"; + +const _abi = [ + { + inputs: [], + name: "PROTOCOL_FLAT_FEE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "burn", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "decimals", + outputs: [ + { + internalType: "uint8", + name: "", + type: "uint8", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "deposit", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "to", + type: "bytes", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdraw", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "withdrawGasFee", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IZRC20Metadata__factory { + static readonly abi = _abi; + static createInterface(): IZRC20MetadataInterface { + return new utils.Interface(_abi) as IZRC20MetadataInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): IZRC20Metadata { + return new Contract(address, _abi, signerOrProvider) as IZRC20Metadata; + } +} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20__factory.ts new file mode 100644 index 00000000..af9bbdd4 --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20__factory.ts @@ -0,0 +1,254 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + IZRC20, + IZRC20Interface, +} from "../../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/IZRC20"; + +const _abi = [ + { + inputs: [], + name: "PROTOCOL_FLAT_FEE", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "burn", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "deposit", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "to", + type: "bytes", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdraw", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "withdrawGasFee", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +export class IZRC20__factory { + static readonly abi = _abi; + static createInterface(): IZRC20Interface { + return new utils.Interface(_abi) as IZRC20Interface; + } + static connect(address: string, signerOrProvider: Signer | Provider): IZRC20 { + return new Contract(address, _abi, signerOrProvider) as IZRC20; + } +} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events__factory.ts new file mode 100644 index 00000000..eef0389a --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events__factory.ts @@ -0,0 +1,177 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + ZRC20Events, + ZRC20EventsInterface, +} from "../../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/ZRC20Events"; + +const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "Approval", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes", + name: "from", + type: "bytes", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "Deposit", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "Transfer", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "gasLimit", + type: "uint256", + }, + ], + name: "UpdatedGasLimit", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "uint256", + name: "protocolFlatFee", + type: "uint256", + }, + ], + name: "UpdatedProtocolFlatFee", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "systemContract", + type: "address", + }, + ], + name: "UpdatedSystemContract", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: false, + internalType: "bytes", + name: "to", + type: "bytes", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "gasFee", + type: "uint256", + }, + { + indexed: false, + internalType: "uint256", + name: "protocolFlatFee", + type: "uint256", + }, + ], + name: "Withdrawal", + type: "event", + }, +] as const; + +export class ZRC20Events__factory { + static readonly abi = _abi; + static createInterface(): ZRC20EventsInterface { + return new utils.Interface(_abi) as ZRC20EventsInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ZRC20Events { + return new Contract(address, _abi, signerOrProvider) as ZRC20Events; + } +} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts new file mode 100644 index 00000000..98e010d3 --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/IZRC20.sol/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IZRC20__factory } from "./IZRC20__factory"; +export { IZRC20Metadata__factory } from "./IZRC20Metadata__factory"; +export { ZRC20Events__factory } from "./ZRC20Events__factory"; diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract__factory.ts new file mode 100644 index 00000000..58d49678 --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract__factory.ts @@ -0,0 +1,116 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + UniversalContract, + UniversalContractInterface, +} from "../../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/UniversalContract"; + +const _abi = [ + { + inputs: [ + { + components: [ + { + internalType: "bytes", + name: "origin", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "chainID", + type: "uint256", + }, + ], + internalType: "struct zContext", + name: "context", + type: "tuple", + }, + { + internalType: "address", + name: "zrc20", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + ], + name: "onCrossChainCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes", + name: "origin", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "chainID", + type: "uint256", + }, + ], + internalType: "struct revertContext", + name: "context", + type: "tuple", + }, + { + internalType: "address", + name: "zrc20", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + ], + name: "onRevert", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class UniversalContract__factory { + static readonly abi = _abi; + static createInterface(): UniversalContractInterface { + return new utils.Interface(_abi) as UniversalContractInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): UniversalContract { + return new Contract(address, _abi, signerOrProvider) as UniversalContract; + } +} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract__factory.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract__factory.ts new file mode 100644 index 00000000..0a0e5502 --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract__factory.ts @@ -0,0 +1,71 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { + ZContract, + ZContractInterface, +} from "../../../../../../../@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/ZContract"; + +const _abi = [ + { + inputs: [ + { + components: [ + { + internalType: "bytes", + name: "origin", + type: "bytes", + }, + { + internalType: "address", + name: "sender", + type: "address", + }, + { + internalType: "uint256", + name: "chainID", + type: "uint256", + }, + ], + internalType: "struct zContext", + name: "context", + type: "tuple", + }, + { + internalType: "address", + name: "zrc20", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + ], + name: "onCrossChainCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +export class ZContract__factory { + static readonly abi = _abi; + static createInterface(): ZContractInterface { + return new utils.Interface(_abi) as ZContractInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ZContract { + return new Contract(address, _abi, signerOrProvider) as ZContract; + } +} diff --git a/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts new file mode 100644 index 00000000..c297a535 --- /dev/null +++ b/typechain-types/factories/@zetachain/protocol-contracts/contracts/zevm/interfaces/zContract.sol/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { UniversalContract__factory } from "./UniversalContract__factory"; +export { ZContract__factory } from "./ZContract__factory"; From 8fc958647ceaf1be7400040b84b3960efb9584d3 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 17:26:07 +0900 Subject: [PATCH 11/18] remove signer address log --- packages/tasks/src/zetachainCall.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index 76c5d451..3af03d9e 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -9,7 +9,6 @@ export const zetachainCall = async ( hre: HardhatRuntimeEnvironment ) => { const [signer] = await hre.ethers.getSigners(); - console.log("Signer address:", signer.address); const { utils } = hre.ethers; const gateway = new hre.ethers.Contract( From b10bd018b7d9869c7bfd5456d502bc9cffc890ca Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 18:33:26 +0900 Subject: [PATCH 12/18] refactor zetachainWithdrawAndCall --- .../src/abi/GatewayEVM.sol/GatewayEVM.json | 1 + .../src/abi/GatewayZEVM.sol/GatewayZEVM.json | 1 + packages/client/src/abi/ZRC20.sol/ZRC20.json | 1 + .../client/src/abi/ZRC20.sol/ZRC20Errors.json | 1 + packages/client/src/client.ts | 2 + packages/client/src/index.ts | 1 + .../client/src/zetachainWithdrawAndCall.ts | 101 ++++++++++++++++++ .../tasks/src/zetachainWithdrawAndCall.ts | 97 ++++------------- 8 files changed, 127 insertions(+), 78 deletions(-) create mode 100644 packages/client/src/abi/GatewayEVM.sol/GatewayEVM.json create mode 100644 packages/client/src/abi/GatewayZEVM.sol/GatewayZEVM.json create mode 100644 packages/client/src/abi/ZRC20.sol/ZRC20.json create mode 100644 packages/client/src/abi/ZRC20.sol/ZRC20Errors.json create mode 100644 packages/client/src/zetachainWithdrawAndCall.ts diff --git a/packages/client/src/abi/GatewayEVM.sol/GatewayEVM.json b/packages/client/src/abi/GatewayEVM.sol/GatewayEVM.json new file mode 100644 index 00000000..69f48b46 --- /dev/null +++ b/packages/client/src/abi/GatewayEVM.sol/GatewayEVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET_HANDLER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PAUSER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TSS_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"call","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"custody","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"asset","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"asset","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"function","name":"executeRevert","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeWithERC20","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"tssAddress_","type":"address","internalType":"address"},{"name":"zetaToken_","type":"address","internalType":"address"},{"name":"admin_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revertWithERC20","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setConnector","inputs":[{"name":"zetaConnector_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCustody","inputs":[{"name":"custody_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"tssAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"zetaConnector","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"zetaToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Called","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Deposited","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"asset","type":"address","indexed":false,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Executed","inputs":[{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ExecutedWithERC20","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Reverted","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"revertContext","type":"tuple","indexed":false,"internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ApprovalFailed","inputs":[]},{"type":"error","name":"ConnectorInitialized","inputs":[]},{"type":"error","name":"CustodyInitialized","inputs":[]},{"type":"error","name":"DepositFailed","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExecutionFailed","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InsufficientERC20Amount","inputs":[]},{"type":"error","name":"InsufficientETHAmount","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"NotWhitelistedInCustody","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516136f06100fd6000396000818161217a015281816121a3015261262f01526136f06000f3fe6080604052600436106101e35760003560e01c80635d62c86011610102578063ae7a3a6f11610095578063d547741f11610064578063d547741f1461062e578063dda79b751461064e578063e63ab1e91461066e578063f7ad60db146106a257600080fd5b8063ae7a3a6f146105ae578063c0c53b8b146105ce578063d09e3b78146105ee578063d0b492c31461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635d62c86014610448578063726ac97c1461047c578063744b9b8b1461048f5780638456cb59146104a257600080fd5b806336568abe1161017a57806352d1902d1161014957806352d1902d146103bc57806357bec62f146103d15780635b112591146103f15780635c975abb1461041157600080fd5b806336568abe146103545780633f4ba83a146103745780634f1ef286146103895780635131ab591461039c57600080fd5b80631cff79cd116101b65780631cff79cd1461027f57806321e093b11461029f578063248a9ca3146102d75780632f2ff15d1461033457600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f5780631becceb41461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b34801561026b57600080fd5b5061023d61027a366004612e61565b610955565b61029261028d366004612ec8565b6109ec565b6040516102149190612f89565b3480156102ab57600080fd5b506003546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102e357600080fd5b506103266102f2366004612f9c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561034057600080fd5b5061023d61034f366004612fb5565b610aef565b34801561036057600080fd5b5061023d61036f366004612fb5565b610b33565b34801561038057600080fd5b5061023d610b84565b61023d610397366004613010565b610bb9565b3480156103a857600080fd5b5061023d6103b7366004613117565b610bd8565b3480156103c857600080fd5b50610326610ef1565b3480156103dd57600080fd5b506002546102bf906001600160a01b031681565b3480156103fd57600080fd5b506001546102bf906001600160a01b031681565b34801561041d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045457600080fd5b506103267f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61048a366004613186565b610f20565b61023d61049d366004612e61565b6110b1565b3480156104ae57600080fd5b5061023d611246565b3480156104c357600080fd5b506102086104d2366004612fb5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610326600081565b34801561053d57600080fd5b506103267f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102926040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d7d565b611278565b3480156105da57600080fd5b5061023d6105e93660046131d4565b61136c565b3480156105fa57600080fd5b5061023d610609366004613217565b611621565b34801561061a57600080fd5b5061023d6106293660046132c1565b611732565b34801561063a57600080fd5b5061023d610649366004612fb5565b6118f4565b34801561065a57600080fd5b506000546102bf906001600160a01b031681565b34801561067a57600080fd5b506103267f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d6106b036600461334c565b611938565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b61095d611c30565b610965611c8e565b6001600160a01b0384166109a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e9392919061352d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a1881611b39565b610a20611c30565b610a28611c8e565b6001600160a01b038516610a68576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a75868686611f72565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610ab493929190613553565b60405180910390a29150610ae760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2981611b39565b61094f8383611b43565b6001600160a01b0381163314610b75576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bae81611b39565b610bb66120df565b50565b610bc161216f565b610bca8261223f565b610bd4828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c0281611b39565b610c0a611c30565b610c12611c8e565b83600003610c4c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c96868661236e565b610ccc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d58919061356d565b610d8e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d99858484611f72565b50610da4868661236e565b610dda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e919061358a565b90508015610e7057610e7087826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610eb793929190613553565b60405180910390a350610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610efb612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f28611c30565b610f30611c8e565b34600003610f6a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610faa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b5050905080611037576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161107f939291906134f7565b60405180910390a350610bd460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9611c30565b6110c1611c8e565b346000036110fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b50509050806111c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516112149594939291906135a3565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61127081611b39565b610bb6612686565b600061128381611b39565b6001600160a01b0382166112c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611306576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113b75750825b905060008267ffffffffffffffff1660011480156113d45750303b155b9050811580156113e2575080155b15611419576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561147a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061149757506001600160a01b038716155b156114ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d66126ff565b6114de612707565b6114e66126ff565b6114ee612717565b6114f9600087611b43565b506115247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115827f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116175784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611629611c30565b611631611c8e565b8460000361166b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b6338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516117019594939291906135a3565b60405180910390a3610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961175c81611b39565b611764611c30565b61176c611c8e565b846000036117a6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fa6001600160a01b0388168787612727565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de09061183f908590600401613644565b600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436878787876040516118ba9493929190613657565b60405180910390a36118eb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461192e81611b39565b61094f838361201b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61196281611b39565b61196a611c30565b611972611c8e565b6001600160a01b0385166119b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119ff576040519150601f19603f3d011682016040523d82523d6000602084013e611a04565b606091505b5050905080611a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a84908690600401613644565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611b009493929190613657565b60405180910390a350611b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bb6813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca919061356d565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af11580156118eb573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356d565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b7f906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f9292919061368e565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd481611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf9181019061358a565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610b7f83836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061356d565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061356d565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af1158015610ee9573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061356d565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd4906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610b7f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610bd4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610b7f8282612af6565b610bd4612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a919061356d565b155b15610b7f576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b13919061369e565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c81919061369e565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b60008060008060608587031215612e7757600080fd5b612e8085612d61565b9350602085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612edd57600080fd5b612ee684612d61565b9250602084013567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e18565b9497909650939450505050565b60005b83811015612f36578181015183820152602001612f1e565b50506000910152565b60008151808452612f57816020860160208601612f1b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612f3f565b600060208284031215612fae57600080fd5b5035919050565b60008060408385031215612fc857600080fd5b82359150612fd860208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561302357600080fd5b61302c83612d61565b9150602083013567ffffffffffffffff81111561304857600080fd5b8301601f8101851361305957600080fd5b803567ffffffffffffffff81111561307357613073612fe1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156130df576130df612fe1565b6040528181528282016020018710156130f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561312f57600080fd5b61313886612d61565b945061314660208701612d61565b935060408601359250606086013567ffffffffffffffff81111561316957600080fd5b61317588828901612e18565b969995985093965092949392505050565b6000806040838503121561319957600080fd5b6131a283612d61565b9150602083013567ffffffffffffffff8111156131be57600080fd5b6131ca85828601612d98565b9150509250929050565b6000806000606084860312156131e957600080fd5b6131f284612d61565b925061320060208501612d61565b915061320e60408501612d61565b90509250925092565b60008060008060008060a0878903121561323057600080fd5b61323987612d61565b95506020870135945061324e60408801612d61565b9350606087013567ffffffffffffffff81111561326a57600080fd5b61327689828a01612e18565b909450925050608087013567ffffffffffffffff81111561329657600080fd5b6132a289828a01612d98565b9150509295509295509295565b600060608284031215612daa57600080fd5b60008060008060008060a087890312156132da57600080fd5b6132e387612d61565b95506132f160208801612d61565b945060408701359350606087013567ffffffffffffffff81111561331457600080fd5b61332089828a01612e18565b909450925050608087013567ffffffffffffffff81111561334057600080fd5b6132a289828a016132af565b6000806000806060858703121561336257600080fd5b61336b85612d61565b9350602085013567ffffffffffffffff81111561338757600080fd5b61339387828801612e18565b909450925050604085013567ffffffffffffffff8111156133b357600080fd5b612e0c878288016132af565b8015158114610bb657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b604081526000613541604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561357f57600080fd5b8151612014816133bf565b60006020828403121561359c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006135cc608083018587613431565b82810360608401526135de818561347a565b98975050505050505050565b6001600160a01b036135fb82612d61565b1682526000602082013567ffffffffffffffff811680821461361c57600080fd5b60208501525061362f60408301836133cd565b60606040860152612b63606086018284613431565b60208152600061201460208301846135ea565b848152606060208201526000613671606083018587613431565b828103604084015261368381856135ea565b979650505050505050565b8183823760009101908152919050565b600082516136b0818460208701612f1b565b919091019291505056fea2646970667358221220c87250f92d4ce753add6a7cc4bdbc2e6885f5d3cad06fa9c00c5899f615d88ea64736f6c634300081a0033","sourceMap":"1053:13852:2:-:0;;;1171:4:42;1128:48;;2057:53:2;;;;;;;;;-1:-1:-1;2081:22:2;:20;:22::i;:::-;1053:13852;;7711:422:41;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:41;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:41;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:41;-1:-1:-1;;;;;8035:33:41;;;;;8087:29;;158:50:108;;;8087:29:41;;146:2:108;131:18;8087:29:41;;;;;;;7981:146;7760:373;7711:422::o;14:200:108:-;1053:13852:2;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101e35760003560e01c80635d62c86011610102578063ae7a3a6f11610095578063d547741f11610064578063d547741f1461062e578063dda79b751461064e578063e63ab1e91461066e578063f7ad60db146106a257600080fd5b8063ae7a3a6f146105ae578063c0c53b8b146105ce578063d09e3b78146105ee578063d0b492c31461060e57600080fd5b806391d14854116100d157806391d14854146104b7578063a217fddf1461051c578063a783c78914610531578063ad3cb1cc1461056557600080fd5b80635d62c86014610448578063726ac97c1461047c578063744b9b8b1461048f5780638456cb59146104a257600080fd5b806336568abe1161017a57806352d1902d1161014957806352d1902d146103bc57806357bec62f146103d15780635b112591146103f15780635c975abb1461041157600080fd5b806336568abe146103545780633f4ba83a146103745780634f1ef286146103895780635131ab591461039c57600080fd5b80631cff79cd116101b65780631cff79cd1461027f57806321e093b11461029f578063248a9ca3146102d75780632f2ff15d1461033457600080fd5b806301ffc9a7146101e857806310188aef1461021d578063102614b01461023f5780631becceb41461025f575b600080fd5b3480156101f457600080fd5b50610208610203366004612d1f565b6106b5565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004612d7d565b61074e565b005b34801561024b57600080fd5b5061023d61025a366004612db0565b610842565b34801561026b57600080fd5b5061023d61027a366004612e61565b610955565b61029261028d366004612ec8565b6109ec565b6040516102149190612f89565b3480156102ab57600080fd5b506003546102bf906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b3480156102e357600080fd5b506103266102f2366004612f9c565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610214565b34801561034057600080fd5b5061023d61034f366004612fb5565b610aef565b34801561036057600080fd5b5061023d61036f366004612fb5565b610b33565b34801561038057600080fd5b5061023d610b84565b61023d610397366004613010565b610bb9565b3480156103a857600080fd5b5061023d6103b7366004613117565b610bd8565b3480156103c857600080fd5b50610326610ef1565b3480156103dd57600080fd5b506002546102bf906001600160a01b031681565b3480156103fd57600080fd5b506001546102bf906001600160a01b031681565b34801561041d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610208565b34801561045457600080fd5b506103267f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61023d61048a366004613186565b610f20565b61023d61049d366004612e61565b6110b1565b3480156104ae57600080fd5b5061023d611246565b3480156104c357600080fd5b506102086104d2366004612fb5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561052857600080fd5b50610326600081565b34801561053d57600080fd5b506103267f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561057157600080fd5b506102926040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105ba57600080fd5b5061023d6105c9366004612d7d565b611278565b3480156105da57600080fd5b5061023d6105e93660046131d4565b61136c565b3480156105fa57600080fd5b5061023d610609366004613217565b611621565b34801561061a57600080fd5b5061023d6106293660046132c1565b611732565b34801561063a57600080fd5b5061023d610649366004612fb5565b6118f4565b34801561065a57600080fd5b506000546102bf906001600160a01b031681565b34801561067a57600080fd5b506103267f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023d6106b036600461334c565b611938565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061074857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061075981611b39565b6001600160a01b038216610799576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b0316156107dc576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108067f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61084a611c30565b610852611c8e565b8260000361088c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d7338385611d0f565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091e939291906134f7565b60405180910390a361094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b61095d611c30565b610965611c8e565b6001600160a01b0384166109a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091e9392919061352d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a1881611b39565b610a20611c30565b610a28611c8e565b6001600160a01b038516610a68576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a75868686611f72565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610ab493929190613553565b60405180910390a29150610ae760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b509392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2981611b39565b61094f8383611b43565b6001600160a01b0381163314610b75576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7f828261201b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bae81611b39565b610bb66120df565b50565b610bc161216f565b610bca8261223f565b610bd4828261224a565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c0281611b39565b610c0a611c30565b610c12611c8e565b83600003610c4c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610c8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c96868661236e565b610ccc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d58919061356d565b610d8e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d99858484611f72565b50610da4868661236e565b610dda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e919061358a565b90508015610e7057610e7087826123fe565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610eb793929190613553565b60405180910390a350610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610efb612624565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f28611c30565b610f30611c8e565b34600003610f6a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610faa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff7576040519150601f19603f3d011682016040523d82523d6000602084013e610ffc565b606091505b5050905080611037576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161107f939291906134f7565b60405180910390a350610bd460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6110b9611c30565b6110c1611c8e565b346000036110fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611188576040519150601f19603f3d011682016040523d82523d6000602084013e61118d565b606091505b50509050806111c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516112149594939291906135a3565b60405180910390a35061094f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61127081611b39565b610bb6612686565b600061128381611b39565b6001600160a01b0382166112c3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546001600160a01b031615611306576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b43565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113b75750825b905060008267ffffffffffffffff1660011480156113d45750303b155b9050811580156113e2575080155b15611419576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561147a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061149757506001600160a01b038716155b156114ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114d66126ff565b6114de612707565b6114e66126ff565b6114ee612717565b6114f9600087611b43565b506115247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b43565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115827f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b43565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156116175784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611629611c30565b611631611c8e565b8460000361166b576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b6338587611d0f565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516117019594939291906135a3565b60405180910390a3610ee960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961175c81611b39565b611764611c30565b61176c611c8e565b846000036117a6576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117e6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fa6001600160a01b0388168787612727565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de09061183f908590600401613644565b600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436878787876040516118ba9493929190613657565b60405180910390a36118eb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461192e81611b39565b61094f838361201b565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61196281611b39565b61196a611c30565b611972611c8e565b6001600160a01b0385166119b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119ff576040519150601f19603f3d011682016040523d82523d6000602084013e611a04565b606091505b5050905080611a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a84908690600401613644565b600060405180830381600087803b158015611a9e57600080fd5b505af1158015611ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611b009493929190613657565b60405180910390a350611b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bb6813361279b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c26576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bdc3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610748565b6000915050610748565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c8c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611d09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e7357611d3a6001600160a01b038316843084612828565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca919061356d565b611e00576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e5f57600080fd5b505af11580156118eb573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356d565b611f30576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b7f906001600160a01b038481169186911684612828565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600080856001600160a01b0316348686604051611f9292919061368e565b60006040518083038185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b509150915081612010576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c26576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610748565b6120e7612861565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061220857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166121fc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610bd481611b39565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122c2575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122bf9181019061358a565b60015b612308576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612364576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016122ff565b610b7f83836128bc565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061356d565b6003546001600160a01b039081169083160361254d576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061356d565b6124da576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561253957600080fd5b505af1158015610ee9573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061356d565b61260a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bd4906001600160a01b03848116911683612727565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c8c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61268e611c30565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612151565b611c8c612912565b61270f612912565b611c8c612979565b61271f612912565b611c8c612981565b6040516001600160a01b03838116602483015260448201839052610b7f91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129d2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610bd4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016122ff565b6040516001600160a01b03848116602483015283811660448301526064820183905261094f9186918216906323b872dd90608401612754565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c8c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c582612a4e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561290a57610b7f8282612af6565b610bd4612b6c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4c612912565b612989612912565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006129e76001600160a01b03841683612ba4565b90508051600014158015612a0c575080806020019051810190612a0a919061356d565b155b15610b7f576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016122ff565b806001600160a01b03163b600003612a9d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016122ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612b13919061369e565b600060405180830381855af49150503d8060008114612b4e576040519150601f19603f3d011682016040523d82523d6000602084013e612b53565b606091505b5091509150612b63858383612bb2565b95945050505050565b3415611c8c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061201483836000612c27565b606082612bc757612bc282612cdd565b612014565b8151158015612bde57506001600160a01b0384163b155b15612c20576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016122ff565b5080612014565b606081471015612c65576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016122ff565b600080856001600160a01b03168486604051612c81919061369e565b60006040518083038185875af1925050503d8060008114612cbe576040519150601f19603f3d011682016040523d82523d6000602084013e612cc3565b606091505b5091509150612cd3868383612bb2565b9695505050505050565b805115612ced5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d3157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461201457600080fd5b80356001600160a01b0381168114612d7857600080fd5b919050565b600060208284031215612d8f57600080fd5b61201482612d61565b600060a08284031215612daa57600080fd5b50919050565b60008060008060808587031215612dc657600080fd5b612dcf85612d61565b935060208501359250612de460408601612d61565b9150606085013567ffffffffffffffff811115612e0057600080fd5b612e0c87828801612d98565b91505092959194509250565b60008083601f840112612e2a57600080fd5b50813567ffffffffffffffff811115612e4257600080fd5b602083019150836020828501011115612e5a57600080fd5b9250929050565b60008060008060608587031215612e7757600080fd5b612e8085612d61565b9350602085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612e18565b909450925050604085013567ffffffffffffffff811115612e0057600080fd5b600080600060408486031215612edd57600080fd5b612ee684612d61565b9250602084013567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e18565b9497909650939450505050565b60005b83811015612f36578181015183820152602001612f1e565b50506000910152565b60008151808452612f57816020860160208601612f1b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120146020830184612f3f565b600060208284031215612fae57600080fd5b5035919050565b60008060408385031215612fc857600080fd5b82359150612fd860208401612d61565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561302357600080fd5b61302c83612d61565b9150602083013567ffffffffffffffff81111561304857600080fd5b8301601f8101851361305957600080fd5b803567ffffffffffffffff81111561307357613073612fe1565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156130df576130df612fe1565b6040528181528282016020018710156130f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561312f57600080fd5b61313886612d61565b945061314660208701612d61565b935060408601359250606086013567ffffffffffffffff81111561316957600080fd5b61317588828901612e18565b969995985093965092949392505050565b6000806040838503121561319957600080fd5b6131a283612d61565b9150602083013567ffffffffffffffff8111156131be57600080fd5b6131ca85828601612d98565b9150509250929050565b6000806000606084860312156131e957600080fd5b6131f284612d61565b925061320060208501612d61565b915061320e60408501612d61565b90509250925092565b60008060008060008060a0878903121561323057600080fd5b61323987612d61565b95506020870135945061324e60408801612d61565b9350606087013567ffffffffffffffff81111561326a57600080fd5b61327689828a01612e18565b909450925050608087013567ffffffffffffffff81111561329657600080fd5b6132a289828a01612d98565b9150509295509295509295565b600060608284031215612daa57600080fd5b60008060008060008060a087890312156132da57600080fd5b6132e387612d61565b95506132f160208801612d61565b945060408701359350606087013567ffffffffffffffff81111561331457600080fd5b61332089828a01612e18565b909450925050608087013567ffffffffffffffff81111561334057600080fd5b6132a289828a016132af565b6000806000806060858703121561336257600080fd5b61336b85612d61565b9350602085013567ffffffffffffffff81111561338757600080fd5b61339387828801612e18565b909450925050604085013567ffffffffffffffff8111156133b357600080fd5b612e0c878288016132af565b8015158114610bb657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261340257600080fd5b830160208101925035905067ffffffffffffffff81111561342257600080fd5b803603821315612e5a57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361348b82612d61565b1682526000602082013561349e816133bf565b151560208401526001600160a01b036134b960408401612d61565b1660408401526134cc60608301836133cd565b60a060608601526134e160a086018284613431565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000612b6360a083018461347a565b604081526000613541604083018587613431565b8281036020840152612cd3818561347a565b838152604060208201526000612b63604083018486613431565b60006020828403121561357f57600080fd5b8151612014816133bf565b60006020828403121561359c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006135cc608083018587613431565b82810360608401526135de818561347a565b98975050505050505050565b6001600160a01b036135fb82612d61565b1682526000602082013567ffffffffffffffff811680821461361c57600080fd5b60208501525061362f60408301836133cd565b60606040860152612b63606086018284613431565b60208152600061201460208301846135ea565b848152606060208201526000613671606083018587613431565b828103604084015261368381856135ea565b979650505050505050565b8183823760009101908152919050565b600082516136b0818460208701612f1b565b919091019291505056fea2646970667358221220c87250f92d4ce753add6a7cc4bdbc2e6885f5d3cad06fa9c00c5899f615d88ea64736f6c634300081a0033","sourceMap":"1053:13852:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:40;;;;;;;;;;-1:-1:-1;3443:202:40;;;;;:::i;:::-;;:::i;:::-;;;516:14:108;;509:22;491:41;;479:2;464:18;3443:202:40;;;;;;;;12007:324:2;;;;;;;;;;-1:-1:-1;12007:324:2;;;;;:::i;:::-;;:::i;:::-;;8785:475;;;;;;;;;;-1:-1:-1;8785:475:2;;;;;:::i;:::-;;:::i;11165:320::-;;;;;;;;;;-1:-1:-1;11165:320:2;;;;;:::i;:::-;;:::i;4952:424::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1597:24::-;;;;;;;;;;-1:-1:-1;1597:24:2;;;;-1:-1:-1;;;;;1597:24:2;;;;;;-1:-1:-1;;;;;4299:55:108;;;4281:74;;4269:2;4254:18;1597:24:2;4135:226:108;4759:191:40;;;;;;;;;;-1:-1:-1;4759:191:40;;;;;:::i;:::-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;;4759:191;;;;4743:25:108;;;4731:2;4716:18;4759:191:40;4597:177:108;5246:136:40;;;;;;;;;;-1:-1:-1;5246:136:40;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:40;;;;;:::i;:::-;;:::i;3731:77:2:-;;;;;;;;;;;;;:::i;4158:214:42:-;;;;;;:::i;:::-;;:::i;5834:1032:2:-;;;;;;;;;;-1:-1:-1;5834:1032:2;;;;;:::i;:::-;;:::i;3705:134:42:-;;;;;;;;;;;;;:::i;1507:28:2:-;;;;;;;;;;-1:-1:-1;1507:28:2;;;;-1:-1:-1;;;;;1507:28:2;;;1417:25;;;;;;;;;;-1:-1:-1;1417:25:2;;;;-1:-1:-1;;;;;1417:25:2;;;2692:145:44;;;;;;;;;;-1:-1:-1;1270:23:44;2821:9;;;2692:145;;1800:76:2;;;;;;;;;;;;1845:31;1800:76;;8001:508;;;;;;:::i;:::-;;:::i;9500:552::-;;;;;;:::i;:::-;;:::i;3618:73::-;;;;;;;;;;;;;:::i;3732:207:40:-;;;;;;;;;;-1:-1:-1;3732:207:40;;;;;:::i;:::-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;;;;3732:207;2317:49;;;;;;;;;;-1:-1:-1;2317:49:40;2362:4;2317:49;;1678:56:2;;;;;;;;;;;;1713:21;1678:56;;1819:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11599:284:2;;;;;;;;;;-1:-1:-1;11599:284:2;;;;;:::i;:::-;;:::i;2308:543::-;;;;;;;;;;-1:-1:-1;2308:543:2;;;;;:::i;:::-;;:::i;10419:519::-;;;;;;;;;;-1:-1:-1;10419:519:2;;;;;:::i;:::-;;:::i;7290:562::-;;;;;;;;;;-1:-1:-1;7290:562:2;;;;;:::i;:::-;;:::i;5662:138:40:-;;;;;;;;;;-1:-1:-1;5662:138:40;;;;;:::i;:::-;;:::i;1311:22:2:-;;;;;;;;;;-1:-1:-1;1311:22:2;;;;-1:-1:-1;;;;;1311:22:2;;;1935:62;;;;;;;;;;;;1973:24;1935:62;;4089:560;;;;;;:::i;:::-;;:::i;3443:202:40:-;3528:4;3551:47;;;3566:32;3551:47;;:87;;-1:-1:-1;1148:25:46;1133:40;;;;3602:36:40;3544:94;3443:202;-1:-1:-1;;3443:202:40:o;12007:324:2:-;2362:4:40;3191:16;2362:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;12105:28:2;::::1;12101:54;;12142:13;;;;;;;;;;;;;;12101:54;12169:13;::::0;-1:-1:-1;;;;;12169:13:2::1;:27:::0;12165:62:::1;;12205:22;;;;;;;;;;;;;;12165:62;12238:46;1845:31;12269:14;12238:10;:46::i;:::-;-1:-1:-1::0;;12294:13:2::1;:30:::0;;;::::1;-1:-1:-1::0;;;;;12294:30:2;;;::::1;::::0;;;::::1;::::0;;12007:324::o;8785:475::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;9005:6:2::2;9015:1;9005:11:::0;9001:49:::2;;9025:25;;;;;;;;;;;;;;9001:49;-1:-1:-1::0;;;;;9064:22:2;::::2;9060:48;;9095:13;;;;;;;;;;;;;;9060:48;9119:53;9146:10;9158:5;9165:6;9119:26;:53::i;:::-;9210:8;-1:-1:-1::0;;;;;9188:65:2::2;9198:10;-1:-1:-1::0;;;;;9188:65:2::2;;9220:6;9228:5;9239:13;9188:65;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::1;8785:475:2::0;;;;:::o;11165:320::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;11367:22:2;::::2;11363:48;;11398:13;;;;;;;;;;;;;;11363:48;11445:8;-1:-1:-1::0;;;;;11426:52:2::2;11433:10;-1:-1:-1::0;;;;;11426:52:2::2;;11455:7;;11464:13;11426:52;;;;;;;;:::i;4952:424::-:0;5153:12;1713:21;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;-1:-1:-1::0;;;;;5185:25:2;::::3;5181:51;;5219:13;;;;;;;;;;;;;;5181:51;5242:19;5264:27;5273:11;5286:4;;5264:8;:27::i;:::-;5242:49;;5316:11;-1:-1:-1::0;;;;;5307:38:2::3;;5329:9;5340:4;;5307:38;;;;;;;;:::i;:::-;;;;;;;;5363:6:::0;-1:-1:-1;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;4952:424:2::0;;;;;;:::o;5246:136:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;6348:245::-:0;-1:-1:-1;;;;;6441:34:40;;966:10:43;6441:34:40;6437:102;;6498:30;;;;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;3731:77:2:-;1973:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3791:10:2::1;:8;:10::i;:::-;3731:77:::0;:::o;4158:214:42:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;5834:1032:2:-;1845:31;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;6075:6:2::3;6085:1;6075:11:::0;6071:49:::3;;6095:25;;;;;;;;;;;;;;6071:49;-1:-1:-1::0;;;;;6134:16:2;::::3;6130:42;;6159:13;;;;;;;;;;;;;;6130:42;6246:24;6260:5;6267:2;6246:13;:24::i;:::-;6241:54;;6279:16;;;;;;;;;;;;;;6241:54;6310:33;::::0;;;;-1:-1:-1;;;;;14361:55:108;;;6310:33:2::3;::::0;::::3;14343:74:108::0;14433:18;;;14426:34;;;6310:21:2;::::3;::::0;::::3;::::0;14316:18:108;;6310:33:2::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6305:63;;6352:16;;;;;;;;;;;;;;6305:63;6429:18;6438:2;6442:4;;6429:8;:18::i;:::-;;6489:24;6503:5;6510:2;6489:13;:24::i;:::-;6484:54;;6522:16;;;;;;;;;;;;;;6484:54;6656:38;::::0;;;;6688:4:::3;6656:38;::::0;::::3;4281:74:108::0;6629:24:2::3;::::0;-1:-1:-1;;;;;6656:23:2;::::3;::::0;::::3;::::0;4254:18:108;;6656:38:2::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6629:65:::0;-1:-1:-1;6708:20:2;;6704:98:::3;;6744:47;6767:5;6774:16;6744:22;:47::i;:::-;6842:2;-1:-1:-1::0;;;;;6817:42:2::3;6835:5;-1:-1:-1::0;;;;;6817:42:2::3;;6846:6;6854:4;;6817:42;;;;;;;;:::i;:::-;;;;;;;;6061:805;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;5834:1032:2::0;;;;;;:::o;3705:134:42:-;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;1327:66:54::1;3705:134:42::0;:::o;8001:508:2:-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;8190:9:2::2;8203:1;8190:14:::0;8186:50:::2;;8213:23;;;;;;;;;;;;;;8186:50;-1:-1:-1::0;;;;;8250:22:2;::::2;8246:48;;8281:13;;;;;;;;;;;;;;8246:48;8325:10;::::0;:39:::2;::::0;8306:14:::2;::::0;-1:-1:-1;;;;;8325:10:2::2;::::0;8349:9:::2;::::0;8306:14;8325:39;8306:14;8325:39;8349:9;8325:10;:39:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8305:59;;;8380:9;8375:38;;8398:15;;;;;;;;;;;;;;8375:38;8451:8;-1:-1:-1::0;;;;;8429:73:2::2;8439:10;-1:-1:-1::0;;;;;8429:73:2::2;;8461:9;8480:1;8488:13;8429:73;;;;;;;;:::i;:::-;;;;;;;;8176:333;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;9500:552:2;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;9728:9:2::2;9741:1;9728:14:::0;9724:50:::2;;9751:23;;;;;;;;;;;;;;9724:50;-1:-1:-1::0;;;;;9788:22:2;::::2;9784:48;;9819:13;;;;;;;;;;;;;;9784:48;9863:10;::::0;:39:::2;::::0;9844:14:::2;::::0;-1:-1:-1;;;;;9863:10:2::2;::::0;9887:9:::2;::::0;9844:14;9863:39;9844:14;9863:39;9887:9;9863:10;:39:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9843:59;;;9918:9;9913:38;;9936:15;;;;;;;;;;;;;;9913:38;9989:8;-1:-1:-1::0;;;;;9967:78:2::2;9977:10;-1:-1:-1::0;;;;;9967:78:2::2;;9999:9;10018:1;10022:7;;10031:13;9967:78;;;;;;;;;;:::i;:::-;;;;;;;;9714:338;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;3618:73:2;1973:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3676:8:2::1;:6;:8::i;11599:284::-:0;2362:4:40;3191:16;2362:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;11689:22:2;::::1;11685:48;;11720:13;;;;;;;;;;;;;;11685:48;11766:1;11747:7:::0;-1:-1:-1;;;;;11747:7:2::1;:21:::0;11743:54:::1;;11777:20;;;;;;;;;;;;;;11743:54;11808:40;1845:31;11839:8;11808:10;:40::i;:::-;-1:-1:-1::0;;11858:7:2::1;:18:::0;;;::::1;-1:-1:-1::0;;;;;11858:18:2;;;::::1;::::0;;;::::1;::::0;;11599:284::o;2308:543::-;8870:21:41;4302:15;;;;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:41;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4951:18;;;;4968:1;4951:18;;;4979:67;;;;5013:22;;;;;;;;4979:67;-1:-1:-1;;;;;2418:25:2;::::1;::::0;;:53:::1;;-1:-1:-1::0;;;;;;2447:24:2;::::1;::::0;2418:53:::1;2414:104;;;2494:13;;;;;;;;;;;;;;2414:104;2527:24;:22;:24::i;:::-;2561;:22;:24::i;:::-;2595:22;:20;:22::i;:::-;2627:17;:15;:17::i;:::-;2655:38;2362:4:40;2686:6:2::0;2655:10:::1;:38::i;:::-;;2703:31;1973:24;2727:6;2703:10;:31::i;:::-;-1:-1:-1::0;2744:10:2::1;:24:::0;;;::::1;-1:-1:-1::0;;;;;2744:24:2;::::1;;::::0;;2778:33:::1;1713:21;2744:24:::0;2778:10:::1;:33::i;:::-;-1:-1:-1::0;2822:9:2::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;2822:22:2;::::1;;::::0;;5066:101:41;;;;5100:23;;;;;;5142:14;;-1:-1:-1;15941:50:108;;5142:14:41;;15929:2:108;15914:18;5142:14:41;;;;;;;5066:101;4092:1081;;;;;2308:543:2;;;:::o;10419:519::-;2316:19:44;:17;:19::i;:::-;3251:21:45::1;:19;:21::i;:::-;10678:6:2::2;10688:1;10678:11:::0;10674:49:::2;;10698:25;;;;;;;;;;;;;;10674:49;-1:-1:-1::0;;;;;10737:22:2;::::2;10733:48;;10768:13;;;;;;;;;;;;;;10733:48;10792:53;10819:10;10831:5;10838:6;10792:26;:53::i;:::-;10883:8;-1:-1:-1::0;;;;;10861:70:2::2;10871:10;-1:-1:-1::0;;;;;10861:70:2::2;;10893:6;10901:5;10908:7;;10917:13;10861:70;;;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::1;1805:1:::0;2388:30;3969:23;3716:283;7290:562:2;1845:31;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;7578:6:2::3;7588:1;7578:11:::0;7574:49:::3;;7598:25;;;;;;;;;;;;;;7574:49;-1:-1:-1::0;;;;;7637:16:2;::::3;7633:42;;7662:13;;;;;;;;;;;;;;7633:42;7686:47;-1:-1:-1::0;;;;;7686:26:2;::::3;7721:2:::0;7726:6;7686:26:::3;:47::i;:::-;7743:38;::::0;;;;-1:-1:-1;;;;;7743:23:2;::::3;::::0;::::3;::::0;:38:::3;::::0;7767:13;;7743:38:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;7810:5;-1:-1:-1::0;;;;;7797:48:2::3;7806:2;-1:-1:-1::0;;;;;7797:48:2::3;;7817:6;7825:4;;7831:13;7797:48;;;;;;;;;:::i;:::-;;;;;;;;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;7290:562:2::0;;;;;;;:::o;5662:138:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;4089:560:2:-:0;1713:21;3191:16:40;3202:4;3191:10;:16::i;:::-;2316:19:44::1;:17;:19::i;:::-;3251:21:45::2;:19;:21::i;:::-;-1:-1:-1::0;;;;;4341:25:2;::::3;4337:51;;4375:13;;;;;;;;;;;;;;4337:51;4399:12;4416:11;-1:-1:-1::0;;;;;4416:16:2::3;4441:9;4416:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4398:58;;;4471:7;4466:38;;4487:17;;;;;;;;;;;;;;4466:38;4514:47;::::0;;;;-1:-1:-1;;;;;4514:32:2;::::3;::::0;::::3;::::0;:47:::3;::::0;4547:13;;4514:47:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;4607:1;-1:-1:-1::0;;;;;4577:65:2::3;4586:11;-1:-1:-1::0;;;;;4577:65:2::3;;4611:9;4622:4;;4628:13;4577:65;;;;;;;;;:::i;:::-;;;;;;;;4327:322;3293:20:45::2;1805:1:::0;2388:30;3969:23;3716:283;3293:20:::2;4089:560:2::0;;;;;:::o;4148:103:40:-;4214:30;4225:4;966:10:43;4214::40;:30::i;7270:387::-;7347:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:40;;;;;;;;;:38;;;;7509:4;7475:38;;;7559:12;966:10:43;;887:96;7559:12:40;-1:-1:-1;;;;;7532:40:40;7550:7;-1:-1:-1;;;;;7532:40:40;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;2905:128:44;1270:23;2821:9;;;2966:61;;;3001:15;;;;;;;;;;;;;;2966:61;2905:128::o;3326:384:45:-;2388:30;3526:9;;:20;;3522:88;;3569:30;;;;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;13155:801:2:-;13267:9;;-1:-1:-1;;;;;13267:9:2;;;13258:18;;;;13254:696;;13371:59;-1:-1:-1;;;;;13371:30:2;;13402:4;13416;13423:6;13371:30;:59::i;:::-;13571:13;;13549:44;;;;;-1:-1:-1;;;;;13571:13:2;;;13549:44;;;14343:74:108;14433:18;;;14426:34;;;13549:21:2;;;;;;14316:18:108;;13549:44:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13544:74;;13602:16;;;;;;;;;;;;;;13544:74;13690:13;;13672:54;;;;;;;;4743:25:108;;;-1:-1:-1;;;;;13690:13:2;;;;13672:46;;4716:18:108;;13672:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13254:696;13811:7;;13797:41;;;;;-1:-1:-1;;;;;4299:55:108;;;13797:41:2;;;4281:74:108;13811:7:2;;;;13797:34;;4254:18:108;;13797:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13792:80;;13847:25;;;;;;;;;;;;;;13792:80;13923:7;;13886:53;;-1:-1:-1;;;;;13886:30:2;;;;13917:4;;13923:7;13932:6;13886:30;:53::i;3716:283:45:-;1805:1;2388:30;3969:23;3716:283::o;3319:261:2:-;3397:12;3422;3436:19;3459:11;-1:-1:-1;;;;;3459:16:2;3484:9;3496:4;;3459:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3421:80;;;;3516:7;3511:38;;3532:17;;;;;;;;;;;;;;3511:38;3567:6;-1:-1:-1;;3319:261:2;;;;;;:::o;7892:388:40:-;7970:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:40;;;;;;;;;;:39;;;;;;8155:40;966:10:43;;8097:14:40;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;3674:178:44;2563:16;:14;:16::i;:::-;1270:23;3791:17;;;::::1;::::0;;3823:22:::1;966:10:43::0;3832:12:44::1;3823:22;::::0;-1:-1:-1;;;;;4299:55:108;;;4281:74;;4269:2;4254:18;3823:22:44::1;;;;;;;3722:130;3674:178::o:0;4599:312:42:-;4679:4;-1:-1:-1;;;;;4688:6:42;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:42;:32;1327:66:54;2035:53;-1:-1:-1;;;;;2035:53:54;;1957:138;4749:32:42;-1:-1:-1;;;;;4749:42:42;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;3000:104:2;2362:4:40;3191:16;2362:4;3191:10;:16::i;6052:538:42:-;6169:17;-1:-1:-1;;;;;6151:50:42;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:42;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;;;;-1:-1:-1;;;;;4299:55:108;;6513:60:42;;;4281:74:108;4254:18;;6513:60:42;;;;;;;;6147:437;1327:66:54;6245:40:42;;6241:120;;6312:34;;;;;;;;4743:25:108;;;4716:18;;6312:34:42;4597:177:108;6241:120:42;6374:54;6404:17;6423:4;6374:29;:54::i;12682:125:2:-;12772:28;;;;;-1:-1:-1;;;;;14361:55:108;;;12772:28:2;;;14343:74:108;12749:4:2;14433:18:108;;;14426:34;;;12749:4:2;12772:21;;;;;;14316:18:108;;12772:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14245:658::-;14339:9;;-1:-1:-1;;;;;14339:9:2;;;14330:18;;;;14326:571;;14528:13;;14506:44;;;;;-1:-1:-1;;;;;14528:13:2;;;14506:44;;;14343:74:108;14433:18;;;14426:34;;;14506:21:2;;;;;;14316:18:108;;14506:44:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14501:74;;14559:16;;;;;;;;;;;;;;14501:74;14647:13;;14629:54;;;;;;;;4743:25:108;;;-1:-1:-1;;;;;14647:13:2;;;;14629:46;;4716:18:108;;14629:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14326:571;14768:7;;14754:41;;;;;-1:-1:-1;;;;;4299:55:108;;;14754:41:2;;;4281:74:108;14768:7:2;;;;14754:34;;4254:18:108;;14754:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14749:80;;14804:25;;;;;;;;;;;;;;14749:80;14870:7;;14843:43;;-1:-1:-1;;;;;14843:26:2;;;;14870:7;14879:6;14843:26;:43::i;5028:213:42:-;5102:4;-1:-1:-1;;;;;5111:6:42;5094:23;;5090:145;;5195:29;;;;;;;;;;;;;;3366:176:44;2316:19;:17;:19::i;:::-;1270:23;3484:16;;;::::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:43::0;3522:12:44::1;887:96:43::0;2968:67:42;6931:20:41;:18;:20::i;2540:111:45:-;6931:20:41;:18;:20::i;:::-;2610:34:45::1;:32;:34::i;1836:97:44:-:0;6931:20:41;:18;:20::i;:::-;1899:27:44::1;:25;:27::i;1303:160:66:-:0;1412:43;;-1:-1:-1;;;;;14361:55:108;;;1412:43:66;;;14343:74:108;14433:18;;;14426:34;;;1385:71:66;;1405:5;;1427:14;;;;;14316:18:108;;1412:43:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1385:19;:71::i;4381:197:40:-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;4464:108;;4514:47;;;;;-1:-1:-1;;;;;14361:55:108;;4514:47:40;;;14343:74:108;14433:18;;;14426:34;;;14316:18;;4514:47:40;14169:297:108;1702:188:66;1829:53;;-1:-1:-1;;;;;18908:55:108;;;1829:53:66;;;18890:74:108;19000:55;;;18980:18;;;18973:83;19072:18;;;19065:34;;;1802:81:66;;1822:5;;1844:18;;;;;18863::108;;1829:53:66;18688:417:108;3105:126:44;1270:23;2821:9;;;3163:62;;3199:15;;;;;;;;;;;;;;2779:335:54;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:54;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:41:-;8870:21;8560:40;;;;;;7146:73;;7191:17;;;;;;;;;;;;;;2657:183:45;6931:20:41;:18;:20::i;1939:156:44:-;6931:20:41;:18;:20::i;:::-;1270:23:44;2071:17;;;::::1;::::0;;1939:156::o;4059:629:66:-;4478:23;4504:33;-1:-1:-1;;;;;4504:27:66;;4532:4;4504:27;:33::i;:::-;4478:59;;4551:10;:17;4572:1;4551:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4631:40;;;;;-1:-1:-1;;;;;4299:55:108;;4631:40:66;;;4281:74:108;4254:18;;4631:40:66;4135:226:108;2186:281:54;2263:17;-1:-1:-1;;;;;2263:29:54;;2296:1;2263:34;2259:119;;2320:47;;;;;-1:-1:-1;;;;;4299:55:108;;2320:47:54;;;4281:74:108;4254:18;;2320:47:54;4135:226:108;2259:119:54;1327:66;2387:73;;;;-1:-1:-1;;;;;2387:73:54;;;;;;;;;;2186:281::o;4106:253:67:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:67;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:67:o;6598:122:54:-;6648:9;:13;6644:70;;6684:19;;;;;;;;;;;;;;2705:151:67;2780:12;2811:38;2833:6;2841:4;2847:1;2811:21;:38::i;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:67;;;:23;5045:49;5041:119;;;5121:24;;;;;-1:-1:-1;;;;;4299:55:108;;5121:24:67;;;4281:74:108;4254:18;;5121:24:67;4135:226:108;5041:119:67;-1:-1:-1;5180:10:67;5173:17;;3180:392;3279:12;3331:5;3307:21;:29;3303:108;;;3359:41;;;;;3394:4;3359:41;;;4281:74:108;4254:18;;3359:41:67;4135:226:108;3303:108:67;3421:12;3435:23;3462:6;-1:-1:-1;;;;;3462:11:67;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;3180:392;-1:-1:-1;;;;;;3180:392:67:o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:108;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;-1:-1:-1;;;;;660:54:108;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:186::-;803:6;856:2;844:9;835:7;831:23;827:32;824:52;;;872:1;869;862:12;824:52;895:29;914:9;895:29;:::i;935:162::-;1001:5;1046:3;1037:6;1032:3;1028:16;1024:26;1021:46;;;1063:1;1060;1053:12;1021:46;-1:-1:-1;1085:6:108;935:162;-1:-1:-1;935:162:108:o;1102:629::-;1219:6;1227;1235;1243;1296:3;1284:9;1275:7;1271:23;1267:33;1264:53;;;1313:1;1310;1303:12;1264:53;1336:29;1355:9;1336:29;:::i;:::-;1326:39;-1:-1:-1;1434:2:108;1419:18;;1406:32;;-1:-1:-1;1481:38:108;1515:2;1500:18;;1481:38;:::i;:::-;1471:48;;1570:2;1559:9;1555:18;1542:32;1597:18;1589:6;1586:30;1583:50;;;1629:1;1626;1619:12;1583:50;1652:73;1717:7;1708:6;1697:9;1693:22;1652:73;:::i;:::-;1642:83;;;1102:629;;;;;;;:::o;1736:347::-;1787:8;1797:6;1851:3;1844:4;1836:6;1832:17;1828:27;1818:55;;1869:1;1866;1859:12;1818:55;-1:-1:-1;1892:20:108;;1935:18;1924:30;;1921:50;;;1967:1;1964;1957:12;1921:50;2004:4;1996:6;1992:17;1980:29;;2056:3;2049:4;2040:6;2032;2028:19;2024:30;2021:39;2018:59;;;2073:1;2070;2063:12;2018:59;1736:347;;;;;:::o;2088:743::-;2207:6;2215;2223;2231;2284:2;2272:9;2263:7;2259:23;2255:32;2252:52;;;2300:1;2297;2290:12;2252:52;2323:29;2342:9;2323:29;:::i;:::-;2313:39;;2403:2;2392:9;2388:18;2375:32;2430:18;2422:6;2419:30;2416:50;;;2462:1;2459;2452:12;2416:50;2501:58;2551:7;2542:6;2531:9;2527:22;2501:58;:::i;:::-;2578:8;;-1:-1:-1;2475:84:108;-1:-1:-1;;2666:2:108;2651:18;;2638:32;2695:18;2682:32;;2679:52;;;2727:1;2724;2717:12;2836:483;2915:6;2923;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3023:29;3042:9;3023:29;:::i;:::-;3013:39;;3103:2;3092:9;3088:18;3075:32;3130:18;3122:6;3119:30;3116:50;;;3162:1;3159;3152:12;3116:50;3201:58;3251:7;3242:6;3231:9;3227:22;3201:58;:::i;:::-;2836:483;;3278:8;;-1:-1:-1;3175:84:108;;-1:-1:-1;;;;2836:483:108:o;3324:250::-;3409:1;3419:113;3433:6;3430:1;3427:13;3419:113;;;3509:11;;;3503:18;3490:11;;;3483:39;3455:2;3448:10;3419:113;;;-1:-1:-1;;3566:1:108;3548:16;;3541:27;3324:250::o;3579:329::-;3620:3;3658:5;3652:12;3685:6;3680:3;3673:19;3701:76;3770:6;3763:4;3758:3;3754:14;3747:4;3740:5;3736:16;3701:76;:::i;:::-;3822:2;3810:15;3827:66;3806:88;3797:98;;;;3897:4;3793:109;;3579:329;-1:-1:-1;;3579:329:108:o;3913:217::-;4060:2;4049:9;4042:21;4023:4;4080:44;4120:2;4109:9;4105:18;4097:6;4080:44;:::i;4366:226::-;4425:6;4478:2;4466:9;4457:7;4453:23;4449:32;4446:52;;;4494:1;4491;4484:12;4446:52;-1:-1:-1;4539:23:108;;4366:226;-1:-1:-1;4366:226:108:o;4779:300::-;4847:6;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4969:23;;;-1:-1:-1;5035:38:108;5069:2;5054:18;;5035:38;:::i;:::-;5025:48;;4779:300;;;;;:::o;5084:184::-;5136:77;5133:1;5126:88;5233:4;5230:1;5223:15;5257:4;5254:1;5247:15;5273:1136;5350:6;5358;5411:2;5399:9;5390:7;5386:23;5382:32;5379:52;;;5427:1;5424;5417:12;5379:52;5450:29;5469:9;5450:29;:::i;:::-;5440:39;;5530:2;5519:9;5515:18;5502:32;5557:18;5549:6;5546:30;5543:50;;;5589:1;5586;5579:12;5543:50;5612:22;;5665:4;5657:13;;5653:27;-1:-1:-1;5643:55:108;;5694:1;5691;5684:12;5643:55;5734:2;5721:16;5760:18;5752:6;5749:30;5746:56;;;5782:18;;:::i;:::-;5831:2;5825:9;5978:66;5973:2;5904:66;5897:4;5889:6;5885:17;5881:90;5877:99;5873:172;5865:6;5861:185;6112:6;6100:10;6097:22;6076:18;6064:10;6061:34;6058:62;6055:88;;;6123:18;;:::i;:::-;6159:2;6152:22;6183;;;6224:15;;;6241:2;6220:24;6217:37;-1:-1:-1;6214:57:108;;;6267:1;6264;6257:12;6214:57;6323:6;6318:2;6314;6310:11;6305:2;6297:6;6293:15;6280:50;6376:1;6371:2;6362:6;6354;6350:19;6346:28;6339:39;6397:6;6387:16;;;;;5273:1136;;;;;:::o;6414:672::-;6511:6;6519;6527;6535;6543;6596:3;6584:9;6575:7;6571:23;6567:33;6564:53;;;6613:1;6610;6603:12;6564:53;6636:29;6655:9;6636:29;:::i;:::-;6626:39;;6684:38;6718:2;6707:9;6703:18;6684:38;:::i;:::-;6674:48;-1:-1:-1;6791:2:108;6776:18;;6763:32;;-1:-1:-1;6870:2:108;6855:18;;6842:32;6897:18;6886:30;;6883:50;;;6929:1;6926;6919:12;6883:50;6968:58;7018:7;7009:6;6998:9;6994:22;6968:58;:::i;:::-;6414:672;;;;-1:-1:-1;6414:672:108;;-1:-1:-1;7045:8:108;;6942:84;6414:672;-1:-1:-1;;;6414:672:108:o;7091:440::-;7190:6;7198;7251:2;7239:9;7230:7;7226:23;7222:32;7219:52;;;7267:1;7264;7257:12;7219:52;7290:29;7309:9;7290:29;:::i;:::-;7280:39;;7370:2;7359:9;7355:18;7342:32;7397:18;7389:6;7386:30;7383:50;;;7429:1;7426;7419:12;7383:50;7452:73;7517:7;7508:6;7497:9;7493:22;7452:73;:::i;:::-;7442:83;;;7091:440;;;;;:::o;7760:334::-;7837:6;7845;7853;7906:2;7894:9;7885:7;7881:23;7877:32;7874:52;;;7922:1;7919;7912:12;7874:52;7945:29;7964:9;7945:29;:::i;:::-;7935:39;;7993:38;8027:2;8016:9;8012:18;7993:38;:::i;:::-;7983:48;;8050:38;8084:2;8073:9;8069:18;8050:38;:::i;:::-;8040:48;;7760:334;;;;;:::o;8099:933::-;8236:6;8244;8252;8260;8268;8276;8329:3;8317:9;8308:7;8304:23;8300:33;8297:53;;;8346:1;8343;8336:12;8297:53;8369:29;8388:9;8369:29;:::i;:::-;8359:39;-1:-1:-1;8467:2:108;8452:18;;8439:32;;-1:-1:-1;8514:38:108;8548:2;8533:18;;8514:38;:::i;:::-;8504:48;;8603:2;8592:9;8588:18;8575:32;8630:18;8622:6;8619:30;8616:50;;;8662:1;8659;8652:12;8616:50;8701:58;8751:7;8742:6;8731:9;8727:22;8701:58;:::i;:::-;8778:8;;-1:-1:-1;8675:84:108;-1:-1:-1;;8866:3:108;8851:19;;8838:33;8896:18;8883:32;;8880:52;;;8928:1;8925;8918:12;8880:52;8951:75;9018:7;9007:8;8996:9;8992:24;8951:75;:::i;:::-;8941:85;;;8099:933;;;;;;;;:::o;9037:161::-;9103:5;9148:2;9139:6;9134:3;9130:16;9126:25;9123:45;;;9164:1;9161;9154:12;9203:933;9340:6;9348;9356;9364;9372;9380;9433:3;9421:9;9412:7;9408:23;9404:33;9401:53;;;9450:1;9447;9440:12;9401:53;9473:29;9492:9;9473:29;:::i;:::-;9463:39;;9521:38;9555:2;9544:9;9540:18;9521:38;:::i;:::-;9511:48;-1:-1:-1;9628:2:108;9613:18;;9600:32;;-1:-1:-1;9707:2:108;9692:18;;9679:32;9734:18;9723:30;;9720:50;;;9766:1;9763;9756:12;9720:50;9805:58;9855:7;9846:6;9835:9;9831:22;9805:58;:::i;:::-;9882:8;;-1:-1:-1;9779:84:108;-1:-1:-1;;9970:3:108;9955:19;;9942:33;10000:18;9987:32;;9984:52;;;10032:1;10029;10022:12;9984:52;10055:75;10122:7;10111:8;10100:9;10096:24;10055:75;:::i;10141:743::-;10260:6;10268;10276;10284;10337:2;10325:9;10316:7;10312:23;10308:32;10305:52;;;10353:1;10350;10343:12;10305:52;10376:29;10395:9;10376:29;:::i;:::-;10366:39;;10456:2;10445:9;10441:18;10428:32;10483:18;10475:6;10472:30;10469:50;;;10515:1;10512;10505:12;10469:50;10554:58;10604:7;10595:6;10584:9;10580:22;10554:58;:::i;:::-;10631:8;;-1:-1:-1;10528:84:108;-1:-1:-1;;10719:2:108;10704:18;;10691:32;10748:18;10735:32;;10732:52;;;10780:1;10777;10770:12;10732:52;10803:75;10870:7;10859:8;10848:9;10844:24;10803:75;:::i;10889:118::-;10975:5;10968:13;10961:21;10954:5;10951:32;10941:60;;10997:1;10994;10987:12;11012:559;11070:5;11077:6;11137:3;11124:17;11219:66;11208:8;11192:14;11188:29;11184:102;11164:18;11160:127;11150:155;;11301:1;11298;11291:12;11150:155;11329:33;;11433:4;11420:18;;;-1:-1:-1;11381:21:108;;-1:-1:-1;11461:18:108;11450:30;;11447:50;;;11493:1;11490;11483:12;11447:50;11540:6;11524:14;11520:27;11513:5;11509:39;11506:59;;;11561:1;11558;11551:12;11576:325;11664:6;11659:3;11652:19;11716:6;11709:5;11702:4;11697:3;11693:14;11680:43;;11768:1;11761:4;11752:6;11747:3;11743:16;11739:27;11732:38;11634:3;11890:4;11820:66;11815:2;11807:6;11803:15;11799:88;11794:3;11790:98;11786:109;11779:116;;11576:325;;;;:::o;11906:803::-;-1:-1:-1;;;;;12005:25:108;12024:5;12005:25;:::i;:::-;12001:74;11996:3;11989:87;11971:3;12124:4;12117:5;12113:16;12100:30;12139;12161:7;12139:30;:::i;:::-;12208:15;12201:23;12194:4;12185:14;;12178:47;-1:-1:-1;;;;;12261:36:108;12291:4;12280:16;;12261:36;:::i;:::-;12257:85;12250:4;12245:3;12241:14;12234:109;12386:55;12435:4;12428:5;12424:16;12417:5;12386:55;:::i;:::-;12473:4;12466;12461:3;12457:14;12450:28;12499:69;12562:4;12557:3;12553:14;12539:12;12525;12499:69;:::i;:::-;12637:4;12626:16;;;12613:30;12659:14;;;;12652:31;;;;-1:-1:-1;12487:81:108;;11906:803;-1:-1:-1;;11906:803:108:o;12714:655::-;13059:6;13048:9;13041:25;-1:-1:-1;;;;;13106:6:108;13102:55;13097:2;13086:9;13082:18;13075:83;13194:3;13189:2;13178:9;13174:18;13167:31;13235:1;13229:3;13218:9;13214:19;13207:30;13273:3;13268:2;13257:9;13253:18;13246:31;13022:4;13294:69;13358:3;13347:9;13343:19;13335:6;13294:69;:::i;13374:470::-;13619:2;13608:9;13601:21;13582:4;13645:61;13702:2;13691:9;13687:18;13679:6;13671;13645:61;:::i;:::-;13754:9;13746:6;13742:22;13737:2;13726:9;13722:18;13715:50;13782:56;13831:6;13823;13782:56;:::i;13849:315::-;14034:6;14023:9;14016:25;14077:2;14072;14061:9;14057:18;14050:30;13997:4;14097:61;14154:2;14143:9;14139:18;14131:6;14123;14097:61;:::i;14471:245::-;14538:6;14591:2;14579:9;14570:7;14566:23;14562:32;14559:52;;;14607:1;14604;14597:12;14559:52;14639:9;14633:16;14658:28;14680:5;14658:28;:::i;14721:184::-;14791:6;14844:2;14832:9;14823:7;14819:23;14815:32;14812:52;;;14860:1;14857;14850:12;14812:52;-1:-1:-1;14883:16:108;;14721:184;-1:-1:-1;14721:184:108:o;15120:663::-;15421:6;15410:9;15403:25;-1:-1:-1;;;;;15468:6:108;15464:55;15459:2;15448:9;15444:18;15437:83;15556:3;15551:2;15540:9;15536:18;15529:31;15384:4;15583:62;15640:3;15629:9;15625:19;15617:6;15609;15583:62;:::i;:::-;15693:9;15685:6;15681:22;15676:2;15665:9;15661:18;15654:50;15721:56;15770:6;15762;15721:56;:::i;:::-;15713:64;15120:663;-1:-1:-1;;;;;;;;15120:663:108:o;16002:588::-;-1:-1:-1;;;;;16101:25:108;16120:5;16101:25;:::i;:::-;16097:74;16092:3;16085:87;16067:3;16220:4;16213:5;16209:16;16196:30;16258:18;16249:7;16245:32;16308:2;16299:7;16296:15;16286:43;;16325:1;16322;16315:12;16286:43;16354:4;16345:14;;16338:26;-1:-1:-1;16407:55:108;16456:4;16445:16;;16449:5;16407:55;:::i;:::-;16494:4;16487;16482:3;16478:14;16471:28;16515:69;16578:4;16573:3;16569:14;16555:12;16541;16515:69;:::i;16595:283::-;16784:2;16773:9;16766:21;16747:4;16804:68;16868:2;16857:9;16853:18;16845:6;16804:68;:::i;16883:541::-;17156:6;17145:9;17138:25;17199:2;17194;17183:9;17179:18;17172:30;17119:4;17225:61;17282:2;17271:9;17267:18;17259:6;17251;17225:61;:::i;:::-;17334:9;17326:6;17322:22;17317:2;17306:9;17302:18;17295:50;17362:56;17411:6;17403;17362:56;:::i;:::-;17354:64;16883:541;-1:-1:-1;;;;;;;16883:541:108:o;17611:271::-;17794:6;17786;17781:3;17768:33;17750:3;17820:16;;17845:13;;;17820:16;17611:271;-1:-1:-1;17611:271:108:o;19110:287::-;19239:3;19277:6;19271:13;19293:66;19352:6;19347:3;19340:4;19332:6;19328:17;19293:66;:::i;:::-;19375:16;;;;;19110:287;-1:-1:-1;;19110:287:108:o","linkReferences":{},"immutableReferences":{"44509":[{"start":8570,"length":32},{"start":8611,"length":32},{"start":9775,"length":32}]}},"methodIdentifiers":{"ASSET_HANDLER_ROLE()":"5d62c860","DEFAULT_ADMIN_ROLE()":"a217fddf","PAUSER_ROLE()":"e63ab1e9","TSS_ROLE()":"a783c789","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","call(address,bytes,(address,bool,address,bytes,uint256))":"1becceb4","custody()":"dda79b75","deposit(address,(address,bool,address,bytes,uint256))":"726ac97c","deposit(address,uint256,address,(address,bool,address,bytes,uint256))":"102614b0","depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":"744b9b8b","depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":"d09e3b78","execute(address,bytes)":"1cff79cd","executeRevert(address,bytes,(address,uint64,bytes))":"f7ad60db","executeWithERC20(address,address,uint256,bytes)":"5131ab59","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address,address)":"c0c53b8b","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":"d0b492c3","revokeRole(bytes32,address)":"d547741f","setConnector(address)":"10188aef","setCustody(address)":"ae7a3a6f","supportsInterface(bytes4)":"01ffc9a7","tssAddress()":"5b112591","unpause()":"3f4ba83a","upgradeToAndCall(address,bytes)":"4f1ef286","zetaConnector()":"57bec62f","zetaToken()":"21e093b1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConnectorInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotWhitelistedInCustody\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Called\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET_HANDLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TSS_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tssAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"zetaToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zetaConnector_\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custody_\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The contract doesn't hold any funds and should never have active allowances.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Called(address,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"The calldata passed to the call.\",\"receiver\":\"The address of the receiver.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\"}},\"Deposited(address,address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of ETH or tokens deposited.\",\"asset\":\"The address of the ERC20 token (zero address if ETH).\",\"payload\":\"The calldata passed with the deposit.\",\"receiver\":\"The address of the receiver.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\"}},\"Executed(address,uint256,bytes)\":{\"params\":{\"data\":\"The calldata passed to the contract call.\",\"destination\":\"The address of the contract called.\",\"value\":\"The amount of ETH sent with the call.\"}},\"ExecutedWithERC20(address,address,uint256,bytes)\":{\"params\":{\"amount\":\"The amount of tokens transferred.\",\"data\":\"The calldata passed to the contract call.\",\"to\":\"The address of the contract called.\",\"token\":\"The address of the ERC20 token.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Reverted(address,address,uint256,bytes,(address,uint64,bytes))\":{\"params\":{\"amount\":\"The amount of ETH sent with the call.\",\"data\":\"The calldata passed to the contract call.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"to\":\"The address of the contract called.\",\"token\":\"The address of the ERC20 token, empty if gas token\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"call(address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"deposit(address,(address,bool,address,bytes,uint256))\":{\"params\":{\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"deposit(address,uint256,address,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"Amount of tokens to deposit.\",\"asset\":\"Address of the ERC20 token.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"Amount of tokens to deposit.\",\"asset\":\"Address of the ERC20 token.\",\"payload\":\"Calldata to pass to the call.\",\"receiver\":\"Address of the receiver.\",\"revertOptions\":\"Revert options.\"}},\"execute(address,bytes)\":{\"details\":\"This function can only be called by the TSS address and it is payable.\",\"params\":{\"data\":\"Calldata to pass to the call.\",\"destination\":\"Address to call.\"},\"returns\":{\"_0\":\"The result of the call.\"}},\"executeRevert(address,bytes,(address,uint64,bytes))\":{\"details\":\"This function can only be called by the TSS address and it is payable.\",\"params\":{\"data\":\"Calldata to pass to the call.\",\"destination\":\"Address to call.\"}},\"executeWithERC20(address,address,uint256,bytes)\":{\"details\":\"This function can only be called by the custody or connector address. It uses the ERC20 allowance system, resetting gateway allowance at the end.\",\"params\":{\"amount\":\"Amount of tokens to transfer.\",\"data\":\"Calldata to pass to the call.\",\"to\":\"Address of the contract to call.\",\"token\":\"Address of the ERC20 token.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address,address)\":{\"details\":\"Using admin to authorize upgrades and pause, and tss for tss role.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))\":{\"details\":\"This function can only be called by the custody or connector address.\",\"params\":{\"amount\":\"Amount of tokens to transfer.\",\"data\":\"Calldata to pass to the call.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"to\":\"Address of the contract to call.\",\"token\":\"Address of the ERC20 token.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setConnector(address)\":{\"params\":{\"zetaConnector_\":\"Address of the connector contract.\"}},\"setCustody(address)\":{\"params\":{\"custody_\":\"Address of the custody contract.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"GatewayEVM\",\"version\":1},\"userdoc\":{\"errors\":{\"ApprovalFailed()\":[{\"notice\":\"Error for failed token approval.\"}],\"ConnectorInitialized()\":[{\"notice\":\"Error for already initialized connector.\"}],\"CustodyInitialized()\":[{\"notice\":\"Error for already initialized custody.\"}],\"DepositFailed()\":[{\"notice\":\"Error for failed deposit.\"}],\"ExecutionFailed()\":[{\"notice\":\"Error for failed execution.\"}],\"InsufficientERC20Amount()\":[{\"notice\":\"Error for insufficient ERC20 token amount.\"}],\"InsufficientETHAmount()\":[{\"notice\":\"Error for insufficient ETH amount.\"}],\"NotWhitelistedInCustody()\":[{\"notice\":\"Error when trying to transfer not whitelisted token to custody.\"}],\"ZeroAddress()\":[{\"notice\":\"Error for zero address input.\"}]},\"events\":{\"Called(address,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when an omnichain smart contract call is made without asset transfer.\"},\"Deposited(address,address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a deposit is made.\"},\"Executed(address,uint256,bytes)\":{\"notice\":\"Emitted when a contract call is executed.\"},\"ExecutedWithERC20(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a contract call with ERC20 tokens is executed.\"},\"Reverted(address,address,uint256,bytes,(address,uint64,bytes))\":{\"notice\":\"Emitted when a contract call is reverted.\"}},\"kind\":\"user\",\"methods\":{\"ASSET_HANDLER_ROLE()\":{\"notice\":\"New role identifier for asset handler role.\"},\"PAUSER_ROLE()\":{\"notice\":\"New role identifier for pauser role.\"},\"TSS_ROLE()\":{\"notice\":\"New role identifier for tss role.\"},\"call(address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Calls an omnichain smart contract without asset transfer.\"},\"custody()\":{\"notice\":\"The address of the custody contract.\"},\"deposit(address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ETH to the TSS address.\"},\"deposit(address,uint256,address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ERC20 tokens to the custody or connector contract.\"},\"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ETH to the TSS address and calls an omnichain smart contract.\"},\"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract.\"},\"execute(address,bytes)\":{\"notice\":\"Executes a call to a destination address without ERC20 tokens.\"},\"executeRevert(address,bytes,(address,uint64,bytes))\":{\"notice\":\"Transfers msg.value to destination contract and executes it's onRevert function.\"},\"executeWithERC20(address,address,uint256,bytes)\":{\"notice\":\"Executes a call to a destination contract using ERC20 tokens.\"},\"initialize(address,address,address)\":{\"notice\":\"Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\"},\"pause()\":{\"notice\":\"Pause contract.\"},\"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))\":{\"notice\":\"Directly transfers ERC20 tokens and calls onRevert.\"},\"setConnector(address)\":{\"notice\":\"Sets the connector contract address.\"},\"setCustody(address)\":{\"notice\":\"Sets the custody contract address.\"},\"tssAddress()\":{\"notice\":\"The address of the TSS (Threshold Signature Scheme) contract.\"},\"unpause()\":{\"notice\":\"Unpause contract.\"},\"zetaConnector()\":{\"notice\":\"The address of the ZetaConnector contract.\"},\"zetaToken()\":{\"notice\":\"The address of the Zeta token contract.\"}},\"notice\":\"The GatewayEVM contract is the endpoint to call smart contracts on external chains.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/evm/GatewayEVM.sol\":\"GatewayEVM\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/Revert.sol\":{\"keccak256\":\"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409\",\"dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY\"]},\"contracts/evm/GatewayEVM.sol\":{\"keccak256\":\"0x04f4dac61cbaa0e43d7ba3e10bc232acf3530ffe62da473de69e148d886e479c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db7bf0de61b174899c70c2a1f9b74e7a7093a820e9c05d786ef4137e6117c549\",\"dweb:/ipfs/QmViuoC93WLAwiq1F44qaWLQT4V6h96B6XfB5ZCUgLNUBg\"]},\"contracts/evm/ZetaConnectorBase.sol\":{\"keccak256\":\"0xdd289e7ac56aa09d5203fe5366aff97ac1591f45e55e9906545e99bf44ad1944\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed9aba1b7f2661645f1993a2f29b382acaedf90beca548982a89f3e124d23d53\",\"dweb:/ipfs/QmdvsKEwv9Ftyd3J8H4pBas4KjwmwpBjLxDiAABHiJ6TfX\"]},\"contracts/evm/interfaces/IERC20Custody.sol\":{\"keccak256\":\"0xd8ada536ba5aa69f38d6b2aea2a285331bda0ab8132e1e2a2132e01764566ed3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49b1e1b13a49df6f7cb3aa3b4290d9cedb3e884adbf1665fdb2951a6e37394d3\",\"dweb:/ipfs/QmT3VjYbju7rGs1xxpkqpyxqU4ftXaQdJHWb91JdwpCXoV\"]},\"contracts/evm/interfaces/IGatewayEVM.sol\":{\"keccak256\":\"0x6bee6d3bf75e7203ea02376791d1b1711e3933ecd95d94019c81d6158b43c1c3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42c16d5568e87aef1531b2d893b6b91ddfc29db7dda7c77f6e308761be1a0ffd\",\"dweb:/ipfs/QmTscYJ2sXFm5axr9CY8hFuKmYJwX2J9sW8kT131TNk4Y1\"]},\"contracts/evm/interfaces/IZetaConnector.sol\":{\"keccak256\":\"0xa08a49c014d92d720a986d47f1e9a977e528ced7d057b349d057451840864ad6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62dd7b7b30718b4302fc66eb9ed199a87e735b348eab445e8a1fa2bfde2f85ac\",\"dweb:/ipfs/QmTgcgSH9n8rjEfPRuB8W82ysfn9mGeRqqTenr5jzxqVFN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"AddressInsufficientBalance"},{"inputs":[],"type":"error","name":"ApprovalFailed"},{"inputs":[],"type":"error","name":"ConnectorInitialized"},{"inputs":[],"type":"error","name":"CustodyInitialized"},{"inputs":[],"type":"error","name":"DepositFailed"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExecutionFailed"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InsufficientERC20Amount"},{"inputs":[],"type":"error","name":"InsufficientETHAmount"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"NotWhitelistedInCustody"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Called","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"address","name":"asset","type":"address","indexed":false},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Deposited","anonymous":false},{"inputs":[{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"Executed","anonymous":false},{"inputs":[{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false}],"type":"event","name":"ExecutedWithERC20","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"address","name":"token","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"bytes","name":"data","type":"bytes","indexed":false},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}],"indexed":false}],"type":"event","name":"Reverted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ASSET_HANDLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TSS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"call"},{"inputs":[],"stateMutability":"view","type":"function","name":"custody","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"payable","type":"function","name":"deposit"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"payable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"executeRevert"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeWithERC20"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"tssAddress_","type":"address"},{"internalType":"address","name":"zetaToken_","type":"address"},{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"revertWithERC20"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address","name":"zetaConnector_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setConnector"},{"inputs":[{"internalType":"address","name":"custody_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCustody"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"tssAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaConnector","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaToken","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"call(address,bytes,(address,bool,address,bytes,uint256))":{"params":{"payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"deposit(address,(address,bool,address,bytes,uint256))":{"params":{"receiver":"Address of the receiver.","revertOptions":"Revert options."}},"deposit(address,uint256,address,(address,bool,address,bytes,uint256))":{"params":{"amount":"Amount of tokens to deposit.","asset":"Address of the ERC20 token.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":{"params":{"payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":{"params":{"amount":"Amount of tokens to deposit.","asset":"Address of the ERC20 token.","payload":"Calldata to pass to the call.","receiver":"Address of the receiver.","revertOptions":"Revert options."}},"execute(address,bytes)":{"details":"This function can only be called by the TSS address and it is payable.","params":{"data":"Calldata to pass to the call.","destination":"Address to call."},"returns":{"_0":"The result of the call."}},"executeRevert(address,bytes,(address,uint64,bytes))":{"details":"This function can only be called by the TSS address and it is payable.","params":{"data":"Calldata to pass to the call.","destination":"Address to call."}},"executeWithERC20(address,address,uint256,bytes)":{"details":"This function can only be called by the custody or connector address. It uses the ERC20 allowance system, resetting gateway allowance at the end.","params":{"amount":"Amount of tokens to transfer.","data":"Calldata to pass to the call.","to":"Address of the contract to call.","token":"Address of the ERC20 token."}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address,address)":{"details":"Using admin to authorize upgrades and pause, and tss for tss role."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":{"details":"This function can only be called by the custody or connector address.","params":{"amount":"Amount of tokens to transfer.","data":"Calldata to pass to the call.","revertContext":"Revert context to pass to onRevert.","to":"Address of the contract to call.","token":"Address of the ERC20 token."}},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setConnector(address)":{"params":{"zetaConnector_":"Address of the connector contract."}},"setCustody(address)":{"params":{"custody_":"Address of the custody contract."}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"ASSET_HANDLER_ROLE()":{"notice":"New role identifier for asset handler role."},"PAUSER_ROLE()":{"notice":"New role identifier for pauser role."},"TSS_ROLE()":{"notice":"New role identifier for tss role."},"call(address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Calls an omnichain smart contract without asset transfer."},"custody()":{"notice":"The address of the custody contract."},"deposit(address,(address,bool,address,bytes,uint256))":{"notice":"Deposits ETH to the TSS address."},"deposit(address,uint256,address,(address,bool,address,bytes,uint256))":{"notice":"Deposits ERC20 tokens to the custody or connector contract."},"depositAndCall(address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Deposits ETH to the TSS address and calls an omnichain smart contract."},"depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))":{"notice":"Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract."},"execute(address,bytes)":{"notice":"Executes a call to a destination address without ERC20 tokens."},"executeRevert(address,bytes,(address,uint64,bytes))":{"notice":"Transfers msg.value to destination contract and executes it's onRevert function."},"executeWithERC20(address,address,uint256,bytes)":{"notice":"Executes a call to a destination contract using ERC20 tokens."},"initialize(address,address,address)":{"notice":"Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE."},"pause()":{"notice":"Pause contract."},"revertWithERC20(address,address,uint256,bytes,(address,uint64,bytes))":{"notice":"Directly transfers ERC20 tokens and calls onRevert."},"setConnector(address)":{"notice":"Sets the connector contract address."},"setCustody(address)":{"notice":"Sets the custody contract address."},"tssAddress()":{"notice":"The address of the TSS (Threshold Signature Scheme) contract."},"unpause()":{"notice":"Unpause contract."},"zetaConnector()":{"notice":"The address of the ZetaConnector contract."},"zetaToken()":{"notice":"The address of the Zeta token contract."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/evm/GatewayEVM.sol":"GatewayEVM"},"evmVersion":"london","libraries":{}},"sources":{"contracts/Revert.sol":{"keccak256":"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b","urls":["bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409","dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY"],"license":"MIT"},"contracts/evm/GatewayEVM.sol":{"keccak256":"0x04f4dac61cbaa0e43d7ba3e10bc232acf3530ffe62da473de69e148d886e479c","urls":["bzz-raw://db7bf0de61b174899c70c2a1f9b74e7a7093a820e9c05d786ef4137e6117c549","dweb:/ipfs/QmViuoC93WLAwiq1F44qaWLQT4V6h96B6XfB5ZCUgLNUBg"],"license":"MIT"},"contracts/evm/ZetaConnectorBase.sol":{"keccak256":"0xdd289e7ac56aa09d5203fe5366aff97ac1591f45e55e9906545e99bf44ad1944","urls":["bzz-raw://ed9aba1b7f2661645f1993a2f29b382acaedf90beca548982a89f3e124d23d53","dweb:/ipfs/QmdvsKEwv9Ftyd3J8H4pBas4KjwmwpBjLxDiAABHiJ6TfX"],"license":"MIT"},"contracts/evm/interfaces/IERC20Custody.sol":{"keccak256":"0xd8ada536ba5aa69f38d6b2aea2a285331bda0ab8132e1e2a2132e01764566ed3","urls":["bzz-raw://49b1e1b13a49df6f7cb3aa3b4290d9cedb3e884adbf1665fdb2951a6e37394d3","dweb:/ipfs/QmT3VjYbju7rGs1xxpkqpyxqU4ftXaQdJHWb91JdwpCXoV"],"license":"MIT"},"contracts/evm/interfaces/IGatewayEVM.sol":{"keccak256":"0x6bee6d3bf75e7203ea02376791d1b1711e3933ecd95d94019c81d6158b43c1c3","urls":["bzz-raw://42c16d5568e87aef1531b2d893b6b91ddfc29db7dda7c77f6e308761be1a0ffd","dweb:/ipfs/QmTscYJ2sXFm5axr9CY8hFuKmYJwX2J9sW8kT131TNk4Y1"],"license":"MIT"},"contracts/evm/interfaces/IZetaConnector.sol":{"keccak256":"0xa08a49c014d92d720a986d47f1e9a977e528ced7d057b349d057451840864ad6","urls":["bzz-raw://62dd7b7b30718b4302fc66eb9ed199a87e735b348eab445e8a1fa2bfde2f85ac","dweb:/ipfs/QmTgcgSH9n8rjEfPRuB8W82ysfn9mGeRqqTenr5jzxqVFN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol":{"keccak256":"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97","urls":["bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007","dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74","urls":["bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45","dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/AccessControl.sol":{"keccak256":"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308","urls":["bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80","dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Pausable.sol":{"keccak256":"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd","urls":["bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc","dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol":{"keccak256":"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133","urls":["bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8","dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":523,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"custody","offset":0,"slot":"0","type":"t_address"},{"astId":526,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"tssAddress","offset":0,"slot":"1","type":"t_address"},{"astId":529,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"zetaConnector","offset":0,"slot":"2","type":"t_address"},{"astId":532,"contract":"contracts/evm/GatewayEVM.sol:GatewayEVM","label":"zetaToken","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"ast":{"absolutePath":"contracts/evm/GatewayEVM.sol","id":1449,"exportedSymbols":{"AccessControlUpgradeable":[44235],"Address":[47717],"ContextUpgradeable":[44717],"ERC165Upgradeable":[45062],"ERC1967Utils":[46098],"GatewayEVM":[1448],"IAccessControl":[45441],"IERC1822Proxiable":[45620],"IERC20":[47066],"IERC20Custody":[2206],"IERC20Permit":[47174],"IGatewayEVM":[2415],"Initializable":[44489],"PausableUpgradeable":[44893],"ReentrancyGuardUpgradeable":[45022],"RevertContext":[21],"RevertOptions":[13],"Revertable":[30],"SafeERC20":[47464],"UUPSUpgradeable":[44671],"ZetaConnectorBase":[1644]},"nodeType":"SourceUnit","src":"32:14874:2","nodes":[{"id":486,"nodeType":"PragmaDirective","src":"32:23:2","nodes":[],"literals":["solidity","0.8",".26"]},{"id":490,"nodeType":"ImportDirective","src":"57:86:2","nodes":[],"absolutePath":"contracts/Revert.sol","file":"../../contracts/Revert.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":31,"symbolAliases":[{"foreign":{"id":487,"name":"RevertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"66:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":488,"name":"RevertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"81:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":489,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"96:10:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":492,"nodeType":"ImportDirective","src":"144:60:2","nodes":[],"absolutePath":"contracts/evm/ZetaConnectorBase.sol","file":"./ZetaConnectorBase.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":1645,"symbolAliases":[{"foreign":{"id":491,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"153:17:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":494,"nodeType":"ImportDirective","src":"205:63:2","nodes":[],"absolutePath":"contracts/evm/interfaces/IERC20Custody.sol","file":"./interfaces/IERC20Custody.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":2207,"symbolAliases":[{"foreign":{"id":493,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"214:13:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":496,"nodeType":"ImportDirective","src":"269:59:2","nodes":[],"absolutePath":"contracts/evm/interfaces/IGatewayEVM.sol","file":"./interfaces/IGatewayEVM.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":2416,"symbolAliases":[{"foreign":{"id":495,"name":"IGatewayEVM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"278:11:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":497,"nodeType":"ImportDirective","src":"330:81:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44236,"symbolAliases":[],"unitAlias":""},{"id":498,"nodeType":"ImportDirective","src":"412:75:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44490,"symbolAliases":[],"unitAlias":""},{"id":499,"nodeType":"ImportDirective","src":"488:77:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44672,"symbolAliases":[],"unitAlias":""},{"id":500,"nodeType":"ImportDirective","src":"566:75:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":44894,"symbolAliases":[],"unitAlias":""},{"id":501,"nodeType":"ImportDirective","src":"642:82:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":45023,"symbolAliases":[],"unitAlias":""},{"id":502,"nodeType":"ImportDirective","src":"725:56:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":47067,"symbolAliases":[],"unitAlias":""},{"id":503,"nodeType":"ImportDirective","src":"782:65:2","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":1449,"sourceUnit":47465,"symbolAliases":[],"unitAlias":""},{"id":1448,"nodeType":"ContractDefinition","src":"1053:13852:2","nodes":[{"id":520,"nodeType":"UsingForDirective","src":"1225:27:2","nodes":[],"global":false,"libraryName":{"id":517,"name":"SafeERC20","nameLocations":["1231:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":47464,"src":"1231:9:2"},"typeName":{"id":519,"nodeType":"UserDefinedTypeName","pathNode":{"id":518,"name":"IERC20","nameLocations":["1245:6:2"],"nodeType":"IdentifierPath","referencedDeclaration":47066,"src":"1245:6:2"},"referencedDeclaration":47066,"src":"1245:6:2","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}}},{"id":523,"nodeType":"VariableDeclaration","src":"1311:22:2","nodes":[],"constant":false,"documentation":{"id":521,"nodeType":"StructuredDocumentation","src":"1258:48:2","text":"@notice The address of the custody contract."},"functionSelector":"dda79b75","mutability":"mutable","name":"custody","nameLocation":"1326:7:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":522,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":526,"nodeType":"VariableDeclaration","src":"1417:25:2","nodes":[],"constant":false,"documentation":{"id":524,"nodeType":"StructuredDocumentation","src":"1339:73:2","text":"@notice The address of the TSS (Threshold Signature Scheme) contract."},"functionSelector":"5b112591","mutability":"mutable","name":"tssAddress","nameLocation":"1432:10:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"1417:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":529,"nodeType":"VariableDeclaration","src":"1507:28:2","nodes":[],"constant":false,"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"1448:54:2","text":"@notice The address of the ZetaConnector contract."},"functionSelector":"57bec62f","mutability":"mutable","name":"zetaConnector","nameLocation":"1522:13:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":528,"name":"address","nodeType":"ElementaryTypeName","src":"1507:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":532,"nodeType":"VariableDeclaration","src":"1597:24:2","nodes":[],"constant":false,"documentation":{"id":530,"nodeType":"StructuredDocumentation","src":"1541:51:2","text":"@notice The address of the Zeta token contract."},"functionSelector":"21e093b1","mutability":"mutable","name":"zetaToken","nameLocation":"1612:9:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":531,"name":"address","nodeType":"ElementaryTypeName","src":"1597:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":538,"nodeType":"VariableDeclaration","src":"1678:56:2","nodes":[],"constant":true,"documentation":{"id":533,"nodeType":"StructuredDocumentation","src":"1628:45:2","text":"@notice New role identifier for tss role."},"functionSelector":"a783c789","mutability":"constant","name":"TSS_ROLE","nameLocation":"1702:8:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1678:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5453535f524f4c45","id":536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1723:10:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb","typeString":"literal_string \"TSS_ROLE\""},"value":"TSS_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb","typeString":"literal_string \"TSS_ROLE\""}],"id":535,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1713:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:21:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":544,"nodeType":"VariableDeclaration","src":"1800:76:2","nodes":[],"constant":true,"documentation":{"id":539,"nodeType":"StructuredDocumentation","src":"1740:55:2","text":"@notice New role identifier for asset handler role."},"functionSelector":"5d62c860","mutability":"constant","name":"ASSET_HANDLER_ROLE","nameLocation":"1824:18:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":540,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1800:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"41535345545f48414e444c45525f524f4c45","id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1855:20:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9","typeString":"literal_string \"ASSET_HANDLER_ROLE\""},"value":"ASSET_HANDLER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9","typeString":"literal_string \"ASSET_HANDLER_ROLE\""}],"id":541,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1845:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1845:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":550,"nodeType":"VariableDeclaration","src":"1935:62:2","nodes":[],"constant":true,"documentation":{"id":545,"nodeType":"StructuredDocumentation","src":"1882:48:2","text":"@notice New role identifier for pauser role."},"functionSelector":"e63ab1e9","mutability":"constant","name":"PAUSER_ROLE","nameLocation":"1959:11:2","scope":1448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1935:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5041555345525f524f4c45","id":548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1983:13:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""},"value":"PAUSER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""}],"id":547,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1973:9:2","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1973:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":558,"nodeType":"FunctionDefinition","src":"2057:53:2","nodes":[],"body":{"id":557,"nodeType":"Block","src":"2071:39:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":554,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44457,"src":"2081:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":556,"nodeType":"ExpressionStatement","src":"2081:22:2"}]},"documentation":{"id":551,"nodeType":"StructuredDocumentation","src":"2004:48:2","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":552,"nodeType":"ParameterList","parameters":[],"src":"2068:2:2"},"returnParameters":{"id":553,"nodeType":"ParameterList","parameters":[],"src":"2071:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":624,"nodeType":"FunctionDefinition","src":"2308:543:2","nodes":[],"body":{"id":623,"nodeType":"Block","src":"2404:447:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":570,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2418:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2441:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2433:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":571,"name":"address","nodeType":"ElementaryTypeName","src":"2433:7:2","typeDescriptions":{}}},"id":574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2433:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2418:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":576,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2447:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2469:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2461:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":577,"name":"address","nodeType":"ElementaryTypeName","src":"2461:7:2","typeDescriptions":{}}},"id":580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2447:24:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2418:53:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":587,"nodeType":"IfStatement","src":"2414:104:2","trueBody":{"id":586,"nodeType":"Block","src":"2473:45:2","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":583,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"2494:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2494:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":585,"nodeType":"RevertStatement","src":"2487:20:2"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":588,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44543,"src":"2527:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2527:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":590,"nodeType":"ExpressionStatement","src":"2527:24:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":591,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44933,"src":"2561:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2561:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":593,"nodeType":"ExpressionStatement","src":"2561:24:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":594,"name":"__AccessControl_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43936,"src":"2595:20:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2595:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":596,"nodeType":"ExpressionStatement","src":"2595:22:2"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":597,"name":"__Pausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44769,"src":"2627:15:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2627:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":599,"nodeType":"ExpressionStatement","src":"2627:17:2"},{"expression":{"arguments":[{"id":601,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2666:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":602,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"2686:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":600,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2655:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":604,"nodeType":"ExpressionStatement","src":"2655:38:2"},{"expression":{"arguments":[{"id":606,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"2714:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":607,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"2727:6:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":605,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2703:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2703:31:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":609,"nodeType":"ExpressionStatement","src":"2703:31:2"},{"expression":{"id":612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":610,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"2744:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":611,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2757:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2744:24:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":613,"nodeType":"ExpressionStatement","src":"2744:24:2"},{"expression":{"arguments":[{"id":615,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"2789:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":616,"name":"tssAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":561,"src":"2799:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":614,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2778:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2778:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":618,"nodeType":"ExpressionStatement","src":"2778:33:2"},{"expression":{"id":621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":619,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"2822:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":620,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"2834:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2822:22:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":622,"nodeType":"ExpressionStatement","src":"2822:22:2"}]},"documentation":{"id":559,"nodeType":"StructuredDocumentation","src":"2116:187:2","text":"@notice Initialize with tss address. address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\n @dev Using admin to authorize upgrades and pause, and tss for tss role."},"functionSelector":"c0c53b8b","implemented":true,"kind":"function","modifiers":[{"id":568,"kind":"modifierInvocation","modifierName":{"id":567,"name":"initializer","nameLocations":["2392:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":44343,"src":"2392:11:2"},"nodeType":"ModifierInvocation","src":"2392:11:2"}],"name":"initialize","nameLocation":"2317:10:2","parameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":561,"mutability":"mutable","name":"tssAddress_","nameLocation":"2336:11:2","nodeType":"VariableDeclaration","scope":624,"src":"2328:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":560,"name":"address","nodeType":"ElementaryTypeName","src":"2328:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":563,"mutability":"mutable","name":"zetaToken_","nameLocation":"2357:10:2","nodeType":"VariableDeclaration","scope":624,"src":"2349:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":562,"name":"address","nodeType":"ElementaryTypeName","src":"2349:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":565,"mutability":"mutable","name":"admin_","nameLocation":"2377:6:2","nodeType":"VariableDeclaration","scope":624,"src":"2369:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":564,"name":"address","nodeType":"ElementaryTypeName","src":"2369:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2327:57:2"},"returnParameters":{"id":569,"nodeType":"ParameterList","parameters":[],"src":"2404:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":635,"nodeType":"FunctionDefinition","src":"3000:104:2","nodes":[],"body":{"id":634,"nodeType":"Block","src":"3101:3:2","nodes":[],"statements":[]},"baseFunctions":[44625],"documentation":{"id":625,"nodeType":"StructuredDocumentation","src":"2857:138:2","text":"@dev Authorizes the upgrade of the contract, sender must be owner.\n @param newImplementation Address of the new implementation."},"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":631,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"3081:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":632,"kind":"modifierInvocation","modifierName":{"id":630,"name":"onlyRole","nameLocations":["3072:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3072:8:2"},"nodeType":"ModifierInvocation","src":"3072:28:2"}],"name":"_authorizeUpgrade","nameLocation":"3009:17:2","overrides":{"id":629,"nodeType":"OverrideSpecifier","overrides":[],"src":"3063:8:2"},"parameters":{"id":628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":627,"mutability":"mutable","name":"newImplementation","nameLocation":"3035:17:2","nodeType":"VariableDeclaration","scope":635,"src":"3027:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":626,"name":"address","nodeType":"ElementaryTypeName","src":"3027:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3026:27:2"},"returnParameters":{"id":633,"nodeType":"ParameterList","parameters":[],"src":"3101:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":666,"nodeType":"FunctionDefinition","src":"3319:261:2","nodes":[],"body":{"id":665,"nodeType":"Block","src":"3411:169:2","nodes":[],"statements":[{"assignments":[646,648],"declarations":[{"constant":false,"id":646,"mutability":"mutable","name":"success","nameLocation":"3427:7:2","nodeType":"VariableDeclaration","scope":665,"src":"3422:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":645,"name":"bool","nodeType":"ElementaryTypeName","src":"3422:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":648,"mutability":"mutable","name":"result","nameLocation":"3449:6:2","nodeType":"VariableDeclaration","scope":665,"src":"3436:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":647,"name":"bytes","nodeType":"ElementaryTypeName","src":"3436:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":656,"initialValue":{"arguments":[{"id":654,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"3496:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":649,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"3459:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3471:4:2","memberName":"call","nodeType":"MemberAccess","src":"3459:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":651,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3484:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3488:5:2","memberName":"value","nodeType":"MemberAccess","src":"3484:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3459:36:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3459:42:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3421:80:2"},{"condition":{"id":658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3515:8:2","subExpression":{"id":657,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"3516:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":662,"nodeType":"IfStatement","src":"3511:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":659,"name":"ExecutionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"3532:15:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3532:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":661,"nodeType":"RevertStatement","src":"3525:24:2"}},{"expression":{"id":663,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":648,"src":"3567:6:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":644,"id":664,"nodeType":"Return","src":"3560:13:2"}]},"documentation":{"id":636,"nodeType":"StructuredDocumentation","src":"3110:204:2","text":"@dev Internal function to execute a call to a destination address.\n @param destination Address to call.\n @param data Calldata to pass to the call.\n @return The result of the call."},"implemented":true,"kind":"function","modifiers":[],"name":"_execute","nameLocation":"3328:8:2","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":638,"mutability":"mutable","name":"destination","nameLocation":"3345:11:2","nodeType":"VariableDeclaration","scope":666,"src":"3337:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":637,"name":"address","nodeType":"ElementaryTypeName","src":"3337:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":640,"mutability":"mutable","name":"data","nameLocation":"3373:4:2","nodeType":"VariableDeclaration","scope":666,"src":"3358:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":639,"name":"bytes","nodeType":"ElementaryTypeName","src":"3358:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3336:42:2"},"returnParameters":{"id":644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":666,"src":"3397:12:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":642,"name":"bytes","nodeType":"ElementaryTypeName","src":"3397:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3396:14:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":677,"nodeType":"FunctionDefinition","src":"3618:73:2","nodes":[],"body":{"id":676,"nodeType":"Block","src":"3666:25:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":673,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44868,"src":"3676:6:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3676:8:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":675,"nodeType":"ExpressionStatement","src":"3676:8:2"}]},"documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"3586:27:2","text":"@notice Pause contract."},"functionSelector":"8456cb59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":670,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"3653:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":671,"kind":"modifierInvocation","modifierName":{"id":669,"name":"onlyRole","nameLocations":["3644:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3644:8:2"},"nodeType":"ModifierInvocation","src":"3644:21:2"}],"name":"pause","nameLocation":"3627:5:2","parameters":{"id":668,"nodeType":"ParameterList","parameters":[],"src":"3632:2:2"},"returnParameters":{"id":672,"nodeType":"ParameterList","parameters":[],"src":"3666:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":688,"nodeType":"FunctionDefinition","src":"3731:77:2","nodes":[],"body":{"id":687,"nodeType":"Block","src":"3781:27:2","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":684,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"3791:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3791:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":686,"nodeType":"ExpressionStatement","src":"3791:10:2"}]},"documentation":{"id":678,"nodeType":"StructuredDocumentation","src":"3697:29:2","text":"@notice Unpause contract."},"functionSelector":"3f4ba83a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":681,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":550,"src":"3768:11:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":682,"kind":"modifierInvocation","modifierName":{"id":680,"name":"onlyRole","nameLocations":["3759:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3759:8:2"},"nodeType":"ModifierInvocation","src":"3759:21:2"}],"name":"unpause","nameLocation":"3740:7:2","parameters":{"id":679,"nodeType":"ParameterList","parameters":[],"src":"3747:2:2"},"returnParameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"3781:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":752,"nodeType":"FunctionDefinition","src":"4089:560:2","nodes":[],"body":{"id":751,"nodeType":"Block","src":"4327:322:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":706,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4341:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4364:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4356:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":707,"name":"address","nodeType":"ElementaryTypeName","src":"4356:7:2","typeDescriptions":{}}},"id":710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4356:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4341:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":715,"nodeType":"IfStatement","src":"4337:51:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":712,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"4375:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4375:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":714,"nodeType":"RevertStatement","src":"4368:20:2"}},{"assignments":[717,null],"declarations":[{"constant":false,"id":717,"mutability":"mutable","name":"success","nameLocation":"4404:7:2","nodeType":"VariableDeclaration","scope":751,"src":"4399:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":716,"name":"bool","nodeType":"ElementaryTypeName","src":"4399:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":725,"initialValue":{"arguments":[{"hexValue":"","id":723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4453:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":718,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4416:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4428:4:2","memberName":"call","nodeType":"MemberAccess","src":"4416:16:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":720,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4441:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4445:5:2","memberName":"value","nodeType":"MemberAccess","src":"4441:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4416:36:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4416:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4398:58:2"},{"condition":{"id":727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4470:8:2","subExpression":{"id":726,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"4471:7:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":731,"nodeType":"IfStatement","src":"4466:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":728,"name":"ExecutionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"4487:15:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4487:17:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":730,"nodeType":"RevertStatement","src":"4480:24:2"}},{"expression":{"arguments":[{"id":736,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"4547:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":733,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4525:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":732,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"4514:10:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Revertable_$30_$","typeString":"type(contract Revertable)"}},"id":734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4514:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Revertable_$30","typeString":"contract Revertable"}},"id":735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4538:8:2","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":29,"src":"4514:32:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4514:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":738,"nodeType":"ExpressionStatement","src":"4514:47:2"},{"eventCall":{"arguments":[{"id":740,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"4586:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4607:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4599:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":741,"name":"address","nodeType":"ElementaryTypeName","src":"4599:7:2","typeDescriptions":{}}},"id":744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4599:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":745,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4611:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4615:5:2","memberName":"value","nodeType":"MemberAccess","src":"4611:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":747,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"4622:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":748,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":696,"src":"4628:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"id":739,"name":"Reverted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"4577:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory,struct RevertContext memory)"}},"id":749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4577:65:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":750,"nodeType":"EmitStatement","src":"4572:70:2"}]},"baseFunctions":[2330],"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"3814:270:2","text":"@notice Transfers msg.value to destination contract and executes it's onRevert function.\n @dev This function can only be called by the TSS address and it is payable.\n @param destination Address to call.\n @param data Calldata to pass to the call."},"functionSelector":"f7ad60db","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":699,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"4270:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":700,"kind":"modifierInvocation","modifierName":{"id":698,"name":"onlyRole","nameLocations":["4261:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"4261:8:2"},"nodeType":"ModifierInvocation","src":"4261:18:2"},{"id":702,"kind":"modifierInvocation","modifierName":{"id":701,"name":"whenNotPaused","nameLocations":["4288:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"4288:13:2"},"nodeType":"ModifierInvocation","src":"4288:13:2"},{"id":704,"kind":"modifierInvocation","modifierName":{"id":703,"name":"nonReentrant","nameLocations":["4310:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"4310:12:2"},"nodeType":"ModifierInvocation","src":"4310:12:2"}],"name":"executeRevert","nameLocation":"4098:13:2","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"mutability":"mutable","name":"destination","nameLocation":"4129:11:2","nodeType":"VariableDeclaration","scope":752,"src":"4121:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":690,"name":"address","nodeType":"ElementaryTypeName","src":"4121:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":693,"mutability":"mutable","name":"data","nameLocation":"4165:4:2","nodeType":"VariableDeclaration","scope":752,"src":"4150:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":692,"name":"bytes","nodeType":"ElementaryTypeName","src":"4150:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":696,"mutability":"mutable","name":"revertContext","nameLocation":"4202:13:2","nodeType":"VariableDeclaration","scope":752,"src":"4179:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":695,"nodeType":"UserDefinedTypeName","pathNode":{"id":694,"name":"RevertContext","nameLocations":["4179:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"4179:13:2"},"referencedDeclaration":21,"src":"4179:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"4111:110:2"},"returnParameters":{"id":705,"nodeType":"ParameterList","parameters":[],"src":"4327:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":796,"nodeType":"FunctionDefinition","src":"4952:424:2","nodes":[],"body":{"id":795,"nodeType":"Block","src":"5171:205:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":769,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5185:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5208:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5200:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":770,"name":"address","nodeType":"ElementaryTypeName","src":"5200:7:2","typeDescriptions":{}}},"id":773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5200:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5185:25:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":778,"nodeType":"IfStatement","src":"5181:51:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":775,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"5219:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5219:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":777,"nodeType":"RevertStatement","src":"5212:20:2"}},{"assignments":[780],"declarations":[{"constant":false,"id":780,"mutability":"mutable","name":"result","nameLocation":"5255:6:2","nodeType":"VariableDeclaration","scope":795,"src":"5242:19:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":779,"name":"bytes","nodeType":"ElementaryTypeName","src":"5242:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":785,"initialValue":{"arguments":[{"id":782,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5273:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":783,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"5286:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":781,"name":"_execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"5264:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes calldata) returns (bytes memory)"}},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5264:27:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5242:49:2"},{"eventCall":{"arguments":[{"id":787,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":755,"src":"5316:11:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":788,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5329:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5333:5:2","memberName":"value","nodeType":"MemberAccess","src":"5329:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":790,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"5340:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":786,"name":"Executed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"5307:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory)"}},"id":791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5307:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":792,"nodeType":"EmitStatement","src":"5302:43:2"},{"expression":{"id":793,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":780,"src":"5363:6:2","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":768,"id":794,"nodeType":"Return","src":"5356:13:2"}]},"baseFunctions":[2340],"documentation":{"id":753,"nodeType":"StructuredDocumentation","src":"4655:292:2","text":"@notice Executes a call to a destination address without ERC20 tokens.\n @dev This function can only be called by the TSS address and it is payable.\n @param destination Address to call.\n @param data Calldata to pass to the call.\n @return The result of the call."},"functionSelector":"1cff79cd","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":760,"name":"TSS_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"5083:8:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":761,"kind":"modifierInvocation","modifierName":{"id":759,"name":"onlyRole","nameLocations":["5074:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"5074:8:2"},"nodeType":"ModifierInvocation","src":"5074:18:2"},{"id":763,"kind":"modifierInvocation","modifierName":{"id":762,"name":"whenNotPaused","nameLocations":["5101:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"5101:13:2"},"nodeType":"ModifierInvocation","src":"5101:13:2"},{"id":765,"kind":"modifierInvocation","modifierName":{"id":764,"name":"nonReentrant","nameLocations":["5123:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"5123:12:2"},"nodeType":"ModifierInvocation","src":"5123:12:2"}],"name":"execute","nameLocation":"4961:7:2","parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":755,"mutability":"mutable","name":"destination","nameLocation":"4986:11:2","nodeType":"VariableDeclaration","scope":796,"src":"4978:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":754,"name":"address","nodeType":"ElementaryTypeName","src":"4978:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":757,"mutability":"mutable","name":"data","nameLocation":"5022:4:2","nodeType":"VariableDeclaration","scope":796,"src":"5007:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":756,"name":"bytes","nodeType":"ElementaryTypeName","src":"5007:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4968:64:2"},"returnParameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":796,"src":"5153:12:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":766,"name":"bytes","nodeType":"ElementaryTypeName","src":"5153:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5152:14:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":897,"nodeType":"FunctionDefinition","src":"5834:1032:2","nodes":[],"body":{"id":896,"nodeType":"Block","src":"6061:805:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6075:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6085:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6075:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":821,"nodeType":"IfStatement","src":"6071:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":818,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"6095:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6095:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":820,"nodeType":"RevertStatement","src":"6088:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":822,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6134:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6148:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6140:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":823,"name":"address","nodeType":"ElementaryTypeName","src":"6140:7:2","typeDescriptions":{}}},"id":826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6134:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":831,"nodeType":"IfStatement","src":"6130:42:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":828,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"6159:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6159:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":830,"nodeType":"RevertStatement","src":"6152:20:2"}},{"condition":{"id":836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6245:25:2","subExpression":{"arguments":[{"id":833,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6260:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":834,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6267:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":832,"name":"resetApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"6246:13:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) returns (bool)"}},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6246:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":840,"nodeType":"IfStatement","src":"6241:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":837,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6279:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6279:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":839,"nodeType":"RevertStatement","src":"6272:23:2"}},{"condition":{"id":848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6309:34:2","subExpression":{"arguments":[{"id":845,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6332:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":846,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6336:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":842,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6317:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":841,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"6310:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6324:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"6310:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:33:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":852,"nodeType":"IfStatement","src":"6305:63:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":849,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6352:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6352:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":851,"nodeType":"RevertStatement","src":"6345:23:2"}},{"expression":{"arguments":[{"id":854,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6438:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":855,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"6442:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":853,"name":"_execute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"6429:8:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes calldata) returns (bytes memory)"}},"id":856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6429:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":857,"nodeType":"ExpressionStatement","src":"6429:18:2"},{"condition":{"id":862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6488:25:2","subExpression":{"arguments":[{"id":859,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6503:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":860,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6510:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":858,"name":"resetApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"6489:13:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) returns (bool)"}},"id":861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6489:24:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":866,"nodeType":"IfStatement","src":"6484:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":863,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"6522:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6522:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":865,"nodeType":"RevertStatement","src":"6515:23:2"}},{"assignments":[868],"declarations":[{"constant":false,"id":868,"mutability":"mutable","name":"remainingBalance","nameLocation":"6637:16:2","nodeType":"VariableDeclaration","scope":896,"src":"6629:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":867,"name":"uint256","nodeType":"ElementaryTypeName","src":"6629:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":878,"initialValue":{"arguments":[{"arguments":[{"id":875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6688:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}],"id":874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6680:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":873,"name":"address","nodeType":"ElementaryTypeName","src":"6680:7:2","typeDescriptions":{}}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6680:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":870,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6663:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":869,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"6656:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6656:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6670:9:2","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":47023,"src":"6656:23:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6656:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6629:65:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":879,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6708:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6727:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6708:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":888,"nodeType":"IfStatement","src":"6704:98:2","trueBody":{"id":887,"nodeType":"Block","src":"6730:72:2","statements":[{"expression":{"arguments":[{"id":883,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6767:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":884,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"6774:16:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":882,"name":"transferToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1447,"src":"6744:22:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6744:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"6744:47:2"}]}},{"eventCall":{"arguments":[{"id":890,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6835:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":891,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"6842:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":892,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"6846:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":893,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"6854:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":889,"name":"ExecutedWithERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2244,"src":"6817:17:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory)"}},"id":894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6817:42:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":895,"nodeType":"EmitStatement","src":"6812:47:2"}]},"baseFunctions":[2319],"documentation":{"id":797,"nodeType":"StructuredDocumentation","src":"5382:447:2","text":"@notice Executes a call to a destination contract using ERC20 tokens.\n @dev This function can only be called by the custody or connector address.\n It uses the ERC20 allowance system, resetting gateway allowance at the end.\n @param token Address of the ERC20 token.\n @param to Address of the contract to call.\n @param amount Amount of tokens to transfer.\n @param data Calldata to pass to the call."},"functionSelector":"5131ab59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":808,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"5994:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":809,"kind":"modifierInvocation","modifierName":{"id":807,"name":"onlyRole","nameLocations":["5985:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"5985:8:2"},"nodeType":"ModifierInvocation","src":"5985:28:2"},{"id":811,"kind":"modifierInvocation","modifierName":{"id":810,"name":"whenNotPaused","nameLocations":["6022:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"6022:13:2"},"nodeType":"ModifierInvocation","src":"6022:13:2"},{"id":813,"kind":"modifierInvocation","modifierName":{"id":812,"name":"nonReentrant","nameLocations":["6044:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"6044:12:2"},"nodeType":"ModifierInvocation","src":"6044:12:2"}],"name":"executeWithERC20","nameLocation":"5843:16:2","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"token","nameLocation":"5877:5:2","nodeType":"VariableDeclaration","scope":897,"src":"5869:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":798,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":801,"mutability":"mutable","name":"to","nameLocation":"5900:2:2","nodeType":"VariableDeclaration","scope":897,"src":"5892:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":800,"name":"address","nodeType":"ElementaryTypeName","src":"5892:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":803,"mutability":"mutable","name":"amount","nameLocation":"5920:6:2","nodeType":"VariableDeclaration","scope":897,"src":"5912:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":805,"mutability":"mutable","name":"data","nameLocation":"5951:4:2","nodeType":"VariableDeclaration","scope":897,"src":"5936:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":804,"name":"bytes","nodeType":"ElementaryTypeName","src":"5936:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5859:102:2"},"returnParameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"6061:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":963,"nodeType":"FunctionDefinition","src":"7290:562:2","nodes":[],"body":{"id":962,"nodeType":"Block","src":"7564:288:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":919,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7578:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7588:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7578:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":925,"nodeType":"IfStatement","src":"7574:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":922,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"7598:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7598:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":924,"nodeType":"RevertStatement","src":"7591:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":926,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7637:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7651:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7643:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":927,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:2","typeDescriptions":{}}},"id":930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7643:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7637:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":935,"nodeType":"IfStatement","src":"7633:42:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":932,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"7662:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7662:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":934,"nodeType":"RevertStatement","src":"7655:20:2"}},{"expression":{"arguments":[{"arguments":[{"id":942,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7721:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7713:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":940,"name":"address","nodeType":"ElementaryTypeName","src":"7713:7:2","typeDescriptions":{}}},"id":943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7713:11:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":944,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7726:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":937,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":900,"src":"7693:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":936,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"7686:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7686:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7700:12:2","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":47224,"src":"7686:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,uint256)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7686:47:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":946,"nodeType":"ExpressionStatement","src":"7686:47:2"},{"expression":{"arguments":[{"id":951,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"7767:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":948,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7754:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":947,"name":"Revertable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30,"src":"7743:10:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Revertable_$30_$","typeString":"type(contract Revertable)"}},"id":949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7743:14:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Revertable_$30","typeString":"contract Revertable"}},"id":950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7758:8:2","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":29,"src":"7743:23:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7743:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":953,"nodeType":"ExpressionStatement","src":"7743:38:2"},{"eventCall":{"arguments":[{"id":955,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"7806:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":900,"src":"7810:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":957,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"7817:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":958,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":906,"src":"7825:4:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":959,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"7831:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"id":954,"name":"Reverted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2233,"src":"7797:8:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,bytes memory,struct RevertContext memory)"}},"id":960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7797:48:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":961,"nodeType":"EmitStatement","src":"7792:53:2"}]},"baseFunctions":[2355],"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"6872:413:2","text":"@notice Directly transfers ERC20 tokens and calls onRevert.\n @dev This function can only be called by the custody or connector address.\n @param token Address of the ERC20 token.\n @param to Address of the contract to call.\n @param amount Amount of tokens to transfer.\n @param data Calldata to pass to the call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"d0b492c3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":912,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"7497:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":913,"kind":"modifierInvocation","modifierName":{"id":911,"name":"onlyRole","nameLocations":["7488:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"7488:8:2"},"nodeType":"ModifierInvocation","src":"7488:28:2"},{"id":915,"kind":"modifierInvocation","modifierName":{"id":914,"name":"whenNotPaused","nameLocations":["7525:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"7525:13:2"},"nodeType":"ModifierInvocation","src":"7525:13:2"},{"id":917,"kind":"modifierInvocation","modifierName":{"id":916,"name":"nonReentrant","nameLocations":["7547:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"7547:12:2"},"nodeType":"ModifierInvocation","src":"7547:12:2"}],"name":"revertWithERC20","nameLocation":"7299:15:2","parameters":{"id":910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"token","nameLocation":"7332:5:2","nodeType":"VariableDeclaration","scope":963,"src":"7324:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"7324:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":902,"mutability":"mutable","name":"to","nameLocation":"7355:2:2","nodeType":"VariableDeclaration","scope":963,"src":"7347:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":901,"name":"address","nodeType":"ElementaryTypeName","src":"7347:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":904,"mutability":"mutable","name":"amount","nameLocation":"7375:6:2","nodeType":"VariableDeclaration","scope":963,"src":"7367:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":903,"name":"uint256","nodeType":"ElementaryTypeName","src":"7367:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":906,"mutability":"mutable","name":"data","nameLocation":"7406:4:2","nodeType":"VariableDeclaration","scope":963,"src":"7391:19:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":905,"name":"bytes","nodeType":"ElementaryTypeName","src":"7391:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":909,"mutability":"mutable","name":"revertContext","nameLocation":"7443:13:2","nodeType":"VariableDeclaration","scope":963,"src":"7420:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":908,"nodeType":"UserDefinedTypeName","pathNode":{"id":907,"name":"RevertContext","nameLocations":["7420:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"7420:13:2"},"referencedDeclaration":21,"src":"7420:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"7314:148:2"},"returnParameters":{"id":918,"nodeType":"ParameterList","parameters":[],"src":"7564:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1025,"nodeType":"FunctionDefinition","src":"8001:508:2","nodes":[],"body":{"id":1024,"nodeType":"Block","src":"8176:333:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":976,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8190:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8194:5:2","memberName":"value","nodeType":"MemberAccess","src":"8190:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8203:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8190:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":983,"nodeType":"IfStatement","src":"8186:50:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":980,"name":"InsufficientETHAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"8213:21:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8213:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":982,"nodeType":"RevertStatement","src":"8206:30:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":984,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8250:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8270:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8262:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":985,"name":"address","nodeType":"ElementaryTypeName","src":"8262:7:2","typeDescriptions":{}}},"id":988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8262:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8250:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":993,"nodeType":"IfStatement","src":"8246:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":990,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"8281:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8281:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":992,"nodeType":"RevertStatement","src":"8274:20:2"}},{"assignments":[995,null],"declarations":[{"constant":false,"id":995,"mutability":"mutable","name":"deposited","nameLocation":"8311:9:2","nodeType":"VariableDeclaration","scope":1024,"src":"8306:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":994,"name":"bool","nodeType":"ElementaryTypeName","src":"8306:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1003,"initialValue":{"arguments":[{"hexValue":"","id":1001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8361:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":996,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"8325:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8336:4:2","memberName":"call","nodeType":"MemberAccess","src":"8325:15:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":998,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8349:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8353:5:2","memberName":"value","nodeType":"MemberAccess","src":"8349:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8325:35:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8325:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"8305:59:2"},{"condition":{"id":1005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8379:10:2","subExpression":{"id":1004,"name":"deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":995,"src":"8380:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1009,"nodeType":"IfStatement","src":"8375:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1006,"name":"DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"8398:13:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8398:15:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1008,"nodeType":"RevertStatement","src":"8391:22:2"}},{"eventCall":{"arguments":[{"expression":{"id":1011,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8439:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8443:6:2","memberName":"sender","nodeType":"MemberAccess","src":"8439:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1013,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":966,"src":"8451:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":1014,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8461:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8465:5:2","memberName":"value","nodeType":"MemberAccess","src":"8461:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":1018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8480:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8472:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1016,"name":"address","nodeType":"ElementaryTypeName","src":"8472:7:2","typeDescriptions":{}}},"id":1019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8472:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":1020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8484:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":1021,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":969,"src":"8488:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1010,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"8429:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8429:73:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1023,"nodeType":"EmitStatement","src":"8424:78:2"}]},"baseFunctions":[2364],"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"7858:138:2","text":"@notice Deposits ETH to the TSS address.\n @param receiver Address of the receiver.\n @param revertOptions Revert options."},"functionSelector":"726ac97c","implemented":true,"kind":"function","modifiers":[{"id":972,"kind":"modifierInvocation","modifierName":{"id":971,"name":"whenNotPaused","nameLocations":["8137:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8137:13:2"},"nodeType":"ModifierInvocation","src":"8137:13:2"},{"id":974,"kind":"modifierInvocation","modifierName":{"id":973,"name":"nonReentrant","nameLocations":["8159:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8159:12:2"},"nodeType":"ModifierInvocation","src":"8159:12:2"}],"name":"deposit","nameLocation":"8010:7:2","parameters":{"id":970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"receiver","nameLocation":"8035:8:2","nodeType":"VariableDeclaration","scope":1025,"src":"8027:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"8027:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":969,"mutability":"mutable","name":"revertOptions","nameLocation":"8076:13:2","nodeType":"VariableDeclaration","scope":1025,"src":"8053:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":968,"nodeType":"UserDefinedTypeName","pathNode":{"id":967,"name":"RevertOptions","nameLocations":["8053:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8053:13:2"},"referencedDeclaration":13,"src":"8053:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8017:78:2"},"returnParameters":{"id":975,"nodeType":"ParameterList","parameters":[],"src":"8176:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":1077,"nodeType":"FunctionDefinition","src":"8785:475:2","nodes":[],"body":{"id":1076,"nodeType":"Block","src":"8991:269:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1042,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9005:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9015:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9005:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1048,"nodeType":"IfStatement","src":"9001:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1045,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"9025:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9025:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1047,"nodeType":"RevertStatement","src":"9018:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1049,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"9064:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9084:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9076:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1050,"name":"address","nodeType":"ElementaryTypeName","src":"9076:7:2","typeDescriptions":{}}},"id":1053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9076:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9064:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1058,"nodeType":"IfStatement","src":"9060:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1055,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"9095:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9095:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1057,"nodeType":"RevertStatement","src":"9088:20:2"}},{"expression":{"arguments":[{"expression":{"id":1060,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9146:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9150:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9146:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1062,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9158:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1063,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9165:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1059,"name":"transferFromToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1394,"src":"9119:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9119:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1065,"nodeType":"ExpressionStatement","src":"9119:53:2"},{"eventCall":{"arguments":[{"expression":{"id":1067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9198:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9202:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9198:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1069,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1028,"src":"9210:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1070,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9220:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1071,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1032,"src":"9228:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":1072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9235:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":1073,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1035,"src":"9239:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1066,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"9188:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9188:65:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1075,"nodeType":"EmitStatement","src":"9183:70:2"}]},"baseFunctions":[2377],"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"8515:265:2","text":"@notice Deposits ERC20 tokens to the custody or connector contract.\n @param receiver Address of the receiver.\n @param amount Amount of tokens to deposit.\n @param asset Address of the ERC20 token.\n @param revertOptions Revert options."},"functionSelector":"102614b0","implemented":true,"kind":"function","modifiers":[{"id":1038,"kind":"modifierInvocation","modifierName":{"id":1037,"name":"whenNotPaused","nameLocations":["8952:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8952:13:2"},"nodeType":"ModifierInvocation","src":"8952:13:2"},{"id":1040,"kind":"modifierInvocation","modifierName":{"id":1039,"name":"nonReentrant","nameLocations":["8974:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8974:12:2"},"nodeType":"ModifierInvocation","src":"8974:12:2"}],"name":"deposit","nameLocation":"8794:7:2","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"receiver","nameLocation":"8819:8:2","nodeType":"VariableDeclaration","scope":1077,"src":"8811:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"8811:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1030,"mutability":"mutable","name":"amount","nameLocation":"8845:6:2","nodeType":"VariableDeclaration","scope":1077,"src":"8837:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1029,"name":"uint256","nodeType":"ElementaryTypeName","src":"8837:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1032,"mutability":"mutable","name":"asset","nameLocation":"8869:5:2","nodeType":"VariableDeclaration","scope":1077,"src":"8861:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1031,"name":"address","nodeType":"ElementaryTypeName","src":"8861:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1035,"mutability":"mutable","name":"revertOptions","nameLocation":"8907:13:2","nodeType":"VariableDeclaration","scope":1077,"src":"8884:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1034,"nodeType":"UserDefinedTypeName","pathNode":{"id":1033,"name":"RevertOptions","nameLocations":["8884:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8884:13:2"},"referencedDeclaration":13,"src":"8884:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8801:125:2"},"returnParameters":{"id":1041,"nodeType":"ParameterList","parameters":[],"src":"8991:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1141,"nodeType":"FunctionDefinition","src":"9500:552:2","nodes":[],"body":{"id":1140,"nodeType":"Block","src":"9714:338:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1092,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9728:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9732:5:2","memberName":"value","nodeType":"MemberAccess","src":"9728:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9741:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9728:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1099,"nodeType":"IfStatement","src":"9724:50:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1096,"name":"InsufficientETHAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2283,"src":"9751:21:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9751:23:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1098,"nodeType":"RevertStatement","src":"9744:30:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1100,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1080,"src":"9788:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9808:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9800:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1101,"name":"address","nodeType":"ElementaryTypeName","src":"9800:7:2","typeDescriptions":{}}},"id":1104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9800:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9788:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1109,"nodeType":"IfStatement","src":"9784:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1106,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"9819:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1108,"nodeType":"RevertStatement","src":"9812:20:2"}},{"assignments":[1111,null],"declarations":[{"constant":false,"id":1111,"mutability":"mutable","name":"deposited","nameLocation":"9849:9:2","nodeType":"VariableDeclaration","scope":1140,"src":"9844:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1110,"name":"bool","nodeType":"ElementaryTypeName","src":"9844:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":1119,"initialValue":{"arguments":[{"hexValue":"","id":1117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9899:2:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":1112,"name":"tssAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":526,"src":"9863:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9874:4:2","memberName":"call","nodeType":"MemberAccess","src":"9863:15:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":1114,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9887:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9891:5:2","memberName":"value","nodeType":"MemberAccess","src":"9887:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9863:35:2","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":1118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9863:39:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9843:59:2"},{"condition":{"id":1121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9917:10:2","subExpression":{"id":1120,"name":"deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"9918:9:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1125,"nodeType":"IfStatement","src":"9913:38:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1122,"name":"DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"9936:13:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9936:15:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1124,"nodeType":"RevertStatement","src":"9929:22:2"}},{"eventCall":{"arguments":[{"expression":{"id":1127,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9977:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9981:6:2","memberName":"sender","nodeType":"MemberAccess","src":"9977:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1129,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1080,"src":"9989:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":1130,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9999:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10003:5:2","memberName":"value","nodeType":"MemberAccess","src":"9999:9:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":1134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10018:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10010:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1132,"name":"address","nodeType":"ElementaryTypeName","src":"10010:7:2","typeDescriptions":{}}},"id":1135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10010:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1136,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1082,"src":"10022:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1137,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1085,"src":"10031:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1126,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"9967:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9967:78:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1139,"nodeType":"EmitStatement","src":"9962:83:2"}]},"baseFunctions":[2388],"documentation":{"id":1078,"nodeType":"StructuredDocumentation","src":"9266:229:2","text":"@notice Deposits ETH to the TSS address and calls an omnichain smart contract.\n @param receiver Address of the receiver.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"744b9b8b","implemented":true,"kind":"function","modifiers":[{"id":1088,"kind":"modifierInvocation","modifierName":{"id":1087,"name":"whenNotPaused","nameLocations":["9675:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"9675:13:2"},"nodeType":"ModifierInvocation","src":"9675:13:2"},{"id":1090,"kind":"modifierInvocation","modifierName":{"id":1089,"name":"nonReentrant","nameLocations":["9697:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"9697:12:2"},"nodeType":"ModifierInvocation","src":"9697:12:2"}],"name":"depositAndCall","nameLocation":"9509:14:2","parameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1080,"mutability":"mutable","name":"receiver","nameLocation":"9541:8:2","nodeType":"VariableDeclaration","scope":1141,"src":"9533:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1079,"name":"address","nodeType":"ElementaryTypeName","src":"9533:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1082,"mutability":"mutable","name":"payload","nameLocation":"9574:7:2","nodeType":"VariableDeclaration","scope":1141,"src":"9559:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1081,"name":"bytes","nodeType":"ElementaryTypeName","src":"9559:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1085,"mutability":"mutable","name":"revertOptions","nameLocation":"9614:13:2","nodeType":"VariableDeclaration","scope":1141,"src":"9591:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"RevertOptions","nameLocations":["9591:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"9591:13:2"},"referencedDeclaration":13,"src":"9591:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"9523:110:2"},"returnParameters":{"id":1091,"nodeType":"ParameterList","parameters":[],"src":"9714:0:2"},"scope":1448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":1195,"nodeType":"FunctionDefinition","src":"10419:519:2","nodes":[],"body":{"id":1194,"nodeType":"Block","src":"10664:274:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10678:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10688:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10678:11:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1166,"nodeType":"IfStatement","src":"10674:49:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1163,"name":"InsufficientERC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2286,"src":"10698:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10698:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1165,"nodeType":"RevertStatement","src":"10691:32:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1167,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"10737:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10757:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10749:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1168,"name":"address","nodeType":"ElementaryTypeName","src":"10749:7:2","typeDescriptions":{}}},"id":1171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10749:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10737:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1176,"nodeType":"IfStatement","src":"10733:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1173,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"10768:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10768:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1175,"nodeType":"RevertStatement","src":"10761:20:2"}},{"expression":{"arguments":[{"expression":{"id":1178,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10819:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10823:6:2","memberName":"sender","nodeType":"MemberAccess","src":"10819:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1180,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"10831:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1181,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10838:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1177,"name":"transferFromToAssetHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1394,"src":"10792:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10792:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1183,"nodeType":"ExpressionStatement","src":"10792:53:2"},{"eventCall":{"arguments":[{"expression":{"id":1185,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10871:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10875:6:2","memberName":"sender","nodeType":"MemberAccess","src":"10871:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1187,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"10883:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1188,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1146,"src":"10893:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1189,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"10901:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1190,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"10908:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1191,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1153,"src":"10917:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1184,"name":"Deposited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2260,"src":"10861:9:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,address,bytes memory,struct RevertOptions memory)"}},"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10861:70:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1193,"nodeType":"EmitStatement","src":"10856:75:2"}]},"baseFunctions":[2403],"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"10058:356:2","text":"@notice Deposits ERC20 tokens to the custody or connector contract and calls an omnichain smart contract.\n @param receiver Address of the receiver.\n @param amount Amount of tokens to deposit.\n @param asset Address of the ERC20 token.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"d09e3b78","implemented":true,"kind":"function","modifiers":[{"id":1156,"kind":"modifierInvocation","modifierName":{"id":1155,"name":"whenNotPaused","nameLocations":["10625:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"10625:13:2"},"nodeType":"ModifierInvocation","src":"10625:13:2"},{"id":1158,"kind":"modifierInvocation","modifierName":{"id":1157,"name":"nonReentrant","nameLocations":["10647:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"10647:12:2"},"nodeType":"ModifierInvocation","src":"10647:12:2"}],"name":"depositAndCall","nameLocation":"10428:14:2","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"mutability":"mutable","name":"receiver","nameLocation":"10460:8:2","nodeType":"VariableDeclaration","scope":1195,"src":"10452:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"10452:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"mutability":"mutable","name":"amount","nameLocation":"10486:6:2","nodeType":"VariableDeclaration","scope":1195,"src":"10478:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1145,"name":"uint256","nodeType":"ElementaryTypeName","src":"10478:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1148,"mutability":"mutable","name":"asset","nameLocation":"10510:5:2","nodeType":"VariableDeclaration","scope":1195,"src":"10502:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1147,"name":"address","nodeType":"ElementaryTypeName","src":"10502:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1150,"mutability":"mutable","name":"payload","nameLocation":"10540:7:2","nodeType":"VariableDeclaration","scope":1195,"src":"10525:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1149,"name":"bytes","nodeType":"ElementaryTypeName","src":"10525:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1153,"mutability":"mutable","name":"revertOptions","nameLocation":"10580:13:2","nodeType":"VariableDeclaration","scope":1195,"src":"10557:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1152,"nodeType":"UserDefinedTypeName","pathNode":{"id":1151,"name":"RevertOptions","nameLocations":["10557:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"10557:13:2"},"referencedDeclaration":13,"src":"10557:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"10442:157:2"},"returnParameters":{"id":1159,"nodeType":"ParameterList","parameters":[],"src":"10664:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1229,"nodeType":"FunctionDefinition","src":"11165:320:2","nodes":[],"body":{"id":1228,"nodeType":"Block","src":"11353:132:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1210,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"11367:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11387:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11379:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1211,"name":"address","nodeType":"ElementaryTypeName","src":"11379:7:2","typeDescriptions":{}}},"id":1214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11379:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11367:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1219,"nodeType":"IfStatement","src":"11363:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1216,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"11398:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11398:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1218,"nodeType":"RevertStatement","src":"11391:20:2"}},{"eventCall":{"arguments":[{"expression":{"id":1221,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11433:3:2","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11437:6:2","memberName":"sender","nodeType":"MemberAccess","src":"11433:10:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1223,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"11445:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1224,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1200,"src":"11455:7:2","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":1225,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"11464:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":1220,"name":"Called","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2272,"src":"11426:6:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,struct RevertOptions memory)"}},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11426:52:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1227,"nodeType":"EmitStatement","src":"11421:57:2"}]},"baseFunctions":[2414],"documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"10944:216:2","text":"@notice Calls an omnichain smart contract without asset transfer.\n @param receiver Address of the receiver.\n @param payload Calldata to pass to the call.\n @param revertOptions Revert options."},"functionSelector":"1becceb4","implemented":true,"kind":"function","modifiers":[{"id":1206,"kind":"modifierInvocation","modifierName":{"id":1205,"name":"whenNotPaused","nameLocations":["11314:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11314:13:2"},"nodeType":"ModifierInvocation","src":"11314:13:2"},{"id":1208,"kind":"modifierInvocation","modifierName":{"id":1207,"name":"nonReentrant","nameLocations":["11336:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"11336:12:2"},"nodeType":"ModifierInvocation","src":"11336:12:2"}],"name":"call","nameLocation":"11174:4:2","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1198,"mutability":"mutable","name":"receiver","nameLocation":"11196:8:2","nodeType":"VariableDeclaration","scope":1229,"src":"11188:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"11188:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1200,"mutability":"mutable","name":"payload","nameLocation":"11229:7:2","nodeType":"VariableDeclaration","scope":1229,"src":"11214:22:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1199,"name":"bytes","nodeType":"ElementaryTypeName","src":"11214:5:2","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1203,"mutability":"mutable","name":"revertOptions","nameLocation":"11269:13:2","nodeType":"VariableDeclaration","scope":1229,"src":"11246:36:2","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":1202,"nodeType":"UserDefinedTypeName","pathNode":{"id":1201,"name":"RevertOptions","nameLocations":["11246:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"11246:13:2"},"referencedDeclaration":13,"src":"11246:13:2","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"11178:110:2"},"returnParameters":{"id":1209,"nodeType":"ParameterList","parameters":[],"src":"11353:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1268,"nodeType":"FunctionDefinition","src":"11599:284:2","nodes":[],"body":{"id":1267,"nodeType":"Block","src":"11675:208:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1238,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11689:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11709:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11701:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1239,"name":"address","nodeType":"ElementaryTypeName","src":"11701:7:2","typeDescriptions":{}}},"id":1242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11701:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11689:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1247,"nodeType":"IfStatement","src":"11685:48:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1244,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"11720:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11720:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1246,"nodeType":"RevertStatement","src":"11713:20:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1248,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"11747:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11766:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11758:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1249,"name":"address","nodeType":"ElementaryTypeName","src":"11758:7:2","typeDescriptions":{}}},"id":1252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11758:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11747:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1257,"nodeType":"IfStatement","src":"11743:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1254,"name":"CustodyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"11777:18:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11777:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1256,"nodeType":"RevertStatement","src":"11770:27:2"}},{"expression":{"arguments":[{"id":1259,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"11819:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1260,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11839:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1258,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"11808:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11808:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1262,"nodeType":"ExpressionStatement","src":"11808:40:2"},{"expression":{"id":1265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1263,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"11858:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1264,"name":"custody_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11868:8:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11858:18:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1266,"nodeType":"ExpressionStatement","src":"11858:18:2"}]},"documentation":{"id":1230,"nodeType":"StructuredDocumentation","src":"11491:103:2","text":"@notice Sets the custody contract address.\n @param custody_ Address of the custody contract."},"functionSelector":"ae7a3a6f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1235,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"11655:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1236,"kind":"modifierInvocation","modifierName":{"id":1234,"name":"onlyRole","nameLocations":["11646:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"11646:8:2"},"nodeType":"ModifierInvocation","src":"11646:28:2"}],"name":"setCustody","nameLocation":"11608:10:2","parameters":{"id":1233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1232,"mutability":"mutable","name":"custody_","nameLocation":"11627:8:2","nodeType":"VariableDeclaration","scope":1268,"src":"11619:16:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1231,"name":"address","nodeType":"ElementaryTypeName","src":"11619:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11618:18:2"},"returnParameters":{"id":1237,"nodeType":"ParameterList","parameters":[],"src":"11675:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1307,"nodeType":"FunctionDefinition","src":"12007:324:2","nodes":[],"body":{"id":1306,"nodeType":"Block","src":"12091:240:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1277,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12105:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":1280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12131:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12123:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1278,"name":"address","nodeType":"ElementaryTypeName","src":"12123:7:2","typeDescriptions":{}}},"id":1281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12123:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12105:28:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1286,"nodeType":"IfStatement","src":"12101:54:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1283,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2289,"src":"12142:11:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12142:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1285,"nodeType":"RevertStatement","src":"12135:20:2"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1287,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"12169:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12194:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12186:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"12186:7:2","typeDescriptions":{}}},"id":1291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12186:10:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12169:27:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1296,"nodeType":"IfStatement","src":"12165:62:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1293,"name":"ConnectorInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"12205:20:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12205:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1295,"nodeType":"RevertStatement","src":"12198:29:2"}},{"expression":{"arguments":[{"id":1298,"name":"ASSET_HANDLER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"12249:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1299,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12269:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1297,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"12238:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":1300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12238:46:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1301,"nodeType":"ExpressionStatement","src":"12238:46:2"},{"expression":{"id":1304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1302,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"12294:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1303,"name":"zetaConnector_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1271,"src":"12310:14:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12294:30:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1305,"nodeType":"ExpressionStatement","src":"12294:30:2"}]},"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"11889:113:2","text":"@notice Sets the connector contract address.\n @param zetaConnector_ Address of the connector contract."},"functionSelector":"10188aef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":1274,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"12071:18:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":1275,"kind":"modifierInvocation","modifierName":{"id":1273,"name":"onlyRole","nameLocations":["12062:8:2"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"12062:8:2"},"nodeType":"ModifierInvocation","src":"12062:28:2"}],"name":"setConnector","nameLocation":"12016:12:2","parameters":{"id":1272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1271,"mutability":"mutable","name":"zetaConnector_","nameLocation":"12037:14:2","nodeType":"VariableDeclaration","scope":1307,"src":"12029:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1270,"name":"address","nodeType":"ElementaryTypeName","src":"12029:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12028:24:2"},"returnParameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"12091:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1326,"nodeType":"FunctionDefinition","src":"12682:125:2","nodes":[],"body":{"id":1325,"nodeType":"Block","src":"12755:52:2","nodes":[],"statements":[{"expression":{"arguments":[{"id":1321,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1312,"src":"12794:2:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":1322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12798:1:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":1318,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1310,"src":"12779:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1317,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"12772:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12772:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12786:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"12772:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12772:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1316,"id":1324,"nodeType":"Return","src":"12765:35:2"}]},"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"12337:340:2","text":"@dev Resets the approval of a token for a specified address.\n This is used to ensure that the approval is set to zero before setting it to a new value.\n @param token Address of the ERC20 token.\n @param to Address to reset the approval for.\n @return True if the approval reset was successful, false otherwise."},"implemented":true,"kind":"function","modifiers":[],"name":"resetApproval","nameLocation":"12691:13:2","parameters":{"id":1313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"token","nameLocation":"12713:5:2","nodeType":"VariableDeclaration","scope":1326,"src":"12705:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1309,"name":"address","nodeType":"ElementaryTypeName","src":"12705:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1312,"mutability":"mutable","name":"to","nameLocation":"12728:2:2","nodeType":"VariableDeclaration","scope":1326,"src":"12720:10:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1311,"name":"address","nodeType":"ElementaryTypeName","src":"12720:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12704:27:2"},"returnParameters":{"id":1316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1326,"src":"12749:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1314,"name":"bool","nodeType":"ElementaryTypeName","src":"12749:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12748:6:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":1394,"nodeType":"FunctionDefinition","src":"13155:801:2","nodes":[],"body":{"id":1393,"nodeType":"Block","src":"13244:712:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1336,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13258:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1337,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"13267:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13258:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1391,"nodeType":"Block","src":"13743:207:2","statements":[{"condition":{"id":1377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13796:42:2","subExpression":{"arguments":[{"id":1375,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13832:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":1372,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"13811:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1371,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"13797:13:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Custody_$2206_$","typeString":"type(contract IERC20Custody)"}},"id":1373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Custody_$2206","typeString":"contract IERC20Custody"}},"id":1374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13820:11:2","memberName":"whitelisted","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"13797:34:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":1376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1381,"nodeType":"IfStatement","src":"13792:80:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1378,"name":"NotWhitelistedInCustody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"13847:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13847:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1380,"nodeType":"RevertStatement","src":"13840:32:2"}},{"expression":{"arguments":[{"id":1386,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"13917:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1387,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"13923:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1388,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13932:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1383,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13893:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1382,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13886:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13886:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13900:16:2","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":47251,"src":"13886:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13886:53:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1390,"nodeType":"ExpressionStatement","src":"13886:53:2"}]},"id":1392,"nodeType":"IfStatement","src":"13254:696:2","trueBody":{"id":1370,"nodeType":"Block","src":"13278:459:2","statements":[{"expression":{"arguments":[{"id":1343,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1329,"src":"13402:4:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1346,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13416:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayEVM_$1448","typeString":"contract GatewayEVM"}],"id":1345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13408:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1344,"name":"address","nodeType":"ElementaryTypeName","src":"13408:7:2","typeDescriptions":{}}},"id":1347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13408:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1348,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13423:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1340,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13378:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1339,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13371:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13385:16:2","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":47251,"src":"13371:30:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":1349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:59:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1350,"nodeType":"ExpressionStatement","src":"13371:59:2"},{"condition":{"id":1358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13548:45:2","subExpression":{"arguments":[{"id":1355,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"13571:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1356,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13586:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1352,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1331,"src":"13556:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1351,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"13549:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13563:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"13549:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13549:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1362,"nodeType":"IfStatement","src":"13544:74:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1359,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"13602:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13602:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1361,"nodeType":"RevertStatement","src":"13595:23:2"}},{"expression":{"arguments":[{"id":1367,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1333,"src":"13719:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1364,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"13690:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1363,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"13672:17:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ZetaConnectorBase_$1644_$","typeString":"type(contract ZetaConnectorBase)"}},"id":1365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13672:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ZetaConnectorBase_$1644","typeString":"contract ZetaConnectorBase"}},"id":1366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13705:13:2","memberName":"receiveTokens","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"13672:46:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":1368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13672:54:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1369,"nodeType":"ExpressionStatement","src":"13672:54:2"}]}}]},"documentation":{"id":1327,"nodeType":"StructuredDocumentation","src":"12813:337:2","text":"@dev Transfers tokens from the sender to the asset handler.\n This function handles the transfer of tokens to either the connector or custody contract based on the asset\n type.\n @param from Address of the sender.\n @param token Address of the ERC20 token.\n @param amount Amount of tokens to transfer."},"implemented":true,"kind":"function","modifiers":[],"name":"transferFromToAssetHandler","nameLocation":"13164:26:2","parameters":{"id":1334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1329,"mutability":"mutable","name":"from","nameLocation":"13199:4:2","nodeType":"VariableDeclaration","scope":1394,"src":"13191:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1328,"name":"address","nodeType":"ElementaryTypeName","src":"13191:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1331,"mutability":"mutable","name":"token","nameLocation":"13213:5:2","nodeType":"VariableDeclaration","scope":1394,"src":"13205:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1330,"name":"address","nodeType":"ElementaryTypeName","src":"13205:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1333,"mutability":"mutable","name":"amount","nameLocation":"13228:6:2","nodeType":"VariableDeclaration","scope":1394,"src":"13220:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1332,"name":"uint256","nodeType":"ElementaryTypeName","src":"13220:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13190:45:2"},"returnParameters":{"id":1335,"nodeType":"ParameterList","parameters":[],"src":"13244:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":1447,"nodeType":"FunctionDefinition","src":"14245:658:2","nodes":[],"body":{"id":1446,"nodeType":"Block","src":"14316:587:2","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1402,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14330:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":1403,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":532,"src":"14339:9:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14330:18:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1444,"nodeType":"Block","src":"14700:197:2","statements":[{"condition":{"id":1431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14753:42:2","subExpression":{"arguments":[{"id":1429,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14789:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":1426,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"14768:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1425,"name":"IERC20Custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2206,"src":"14754:13:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Custody_$2206_$","typeString":"type(contract IERC20Custody)"}},"id":1427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14754:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Custody_$2206","typeString":"contract IERC20Custody"}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14777:11:2","memberName":"whitelisted","nodeType":"MemberAccess","referencedDeclaration":2168,"src":"14754:34:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":1430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14754:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1435,"nodeType":"IfStatement","src":"14749:80:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1432,"name":"NotWhitelistedInCustody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2301,"src":"14804:23:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14804:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1434,"nodeType":"RevertStatement","src":"14797:32:2"}},{"expression":{"arguments":[{"id":1440,"name":"custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"14870:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1441,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14879:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1437,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14850:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1436,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"14843:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14857:12:2","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":47224,"src":"14843:26:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$47066_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$47066_$","typeString":"function (contract IERC20,address,uint256)"}},"id":1442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:43:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1443,"nodeType":"ExpressionStatement","src":"14843:43:2"}]},"id":1445,"nodeType":"IfStatement","src":"14326:571:2","trueBody":{"id":1424,"nodeType":"Block","src":"14350:344:2","statements":[{"condition":{"id":1412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14505:45:2","subExpression":{"arguments":[{"id":1409,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"14528:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1410,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14543:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1406,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"14513:5:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1405,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47066,"src":"14506:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$47066_$","typeString":"type(contract IERC20)"}},"id":1407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14506:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$47066","typeString":"contract IERC20"}},"id":1408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14520:7:2","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":47053,"src":"14506:21:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14506:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1416,"nodeType":"IfStatement","src":"14501:74:2","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":1413,"name":"ApprovalFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2292,"src":"14559:14:2","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":1414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14559:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":1415,"nodeType":"RevertStatement","src":"14552:23:2"}},{"expression":{"arguments":[{"id":1421,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1399,"src":"14676:6:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":1418,"name":"zetaConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":529,"src":"14647:13:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1417,"name":"ZetaConnectorBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"14629:17:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ZetaConnectorBase_$1644_$","typeString":"type(contract ZetaConnectorBase)"}},"id":1419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14629:32:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ZetaConnectorBase_$1644","typeString":"contract ZetaConnectorBase"}},"id":1420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14662:13:2","memberName":"receiveTokens","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"14629:46:2","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":1422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14629:54:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1423,"nodeType":"ExpressionStatement","src":"14629:54:2"}]}}]},"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"13962:278:2","text":"@dev Transfers tokens to the asset handler.\n This function handles the transfer of tokens to either the connector or custody contract based on the asset\n type.\n @param token Address of the ERC20 token.\n @param amount Amount of tokens to transfer."},"implemented":true,"kind":"function","modifiers":[],"name":"transferToAssetHandler","nameLocation":"14254:22:2","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"token","nameLocation":"14285:5:2","nodeType":"VariableDeclaration","scope":1447,"src":"14277:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1396,"name":"address","nodeType":"ElementaryTypeName","src":"14277:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"amount","nameLocation":"14300:6:2","nodeType":"VariableDeclaration","scope":1447,"src":"14292:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint256","nodeType":"ElementaryTypeName","src":"14292:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14276:31:2"},"returnParameters":{"id":1401,"nodeType":"ParameterList","parameters":[],"src":"14316:0:2"},"scope":1448,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":505,"name":"Initializable","nameLocations":["1080:13:2"],"nodeType":"IdentifierPath","referencedDeclaration":44489,"src":"1080:13:2"},"id":506,"nodeType":"InheritanceSpecifier","src":"1080:13:2"},{"baseName":{"id":507,"name":"AccessControlUpgradeable","nameLocations":["1099:24:2"],"nodeType":"IdentifierPath","referencedDeclaration":44235,"src":"1099:24:2"},"id":508,"nodeType":"InheritanceSpecifier","src":"1099:24:2"},{"baseName":{"id":509,"name":"UUPSUpgradeable","nameLocations":["1129:15:2"],"nodeType":"IdentifierPath","referencedDeclaration":44671,"src":"1129:15:2"},"id":510,"nodeType":"InheritanceSpecifier","src":"1129:15:2"},{"baseName":{"id":511,"name":"IGatewayEVM","nameLocations":["1150:11:2"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"1150:11:2"},"id":512,"nodeType":"InheritanceSpecifier","src":"1150:11:2"},{"baseName":{"id":513,"name":"ReentrancyGuardUpgradeable","nameLocations":["1167:26:2"],"nodeType":"IdentifierPath","referencedDeclaration":45022,"src":"1167:26:2"},"id":514,"nodeType":"InheritanceSpecifier","src":"1167:26:2"},{"baseName":{"id":515,"name":"PausableUpgradeable","nameLocations":["1199:19:2"],"nodeType":"IdentifierPath","referencedDeclaration":44893,"src":"1199:19:2"},"id":516,"nodeType":"InheritanceSpecifier","src":"1199:19:2"}],"canonicalName":"GatewayEVM","contractDependencies":[],"contractKind":"contract","documentation":{"id":504,"nodeType":"StructuredDocumentation","src":"849:204:2","text":"@title GatewayEVM\n @notice The GatewayEVM contract is the endpoint to call smart contracts on external chains.\n @dev The contract doesn't hold any funds and should never have active allowances."},"fullyImplemented":true,"linearizedBaseContracts":[1448,44893,45022,2415,2273,2302,44671,45620,44235,45062,48334,45441,44717,44489],"name":"GatewayEVM","nameLocation":"1062:10:2","scope":1449,"usedErrors":[2277,2280,2283,2286,2289,2292,2295,2298,2301,44252,44255,44516,44521,44756,44759,44924,45368,45371,45830,45843,47191,47472,47477,47480],"usedEvents":[2219,2233,2244,2260,2272,44260,44748,44753,45380,45389,45398,45809]}],"license":"MIT"},"id":2} \ No newline at end of file diff --git a/packages/client/src/abi/GatewayZEVM.sol/GatewayZEVM.json b/packages/client/src/abi/GatewayZEVM.sol/GatewayZEVM.json new file mode 100644 index 00000000..13e05ecb --- /dev/null +++ b/packages/client/src/abi/GatewayZEVM.sol/GatewayZEVM.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNGIBLE_MODULE_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PAUSER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"call","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndCall","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"depositAndRevert","inputs":[{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"execute","inputs":[{"name":"context","type":"tuple","internalType":"struct zContext","components":[{"name":"origin","type":"bytes","internalType":"bytes"},{"name":"sender","type":"address","internalType":"address"},{"name":"chainID","type":"uint256","internalType":"uint256"}]},{"name":"zrc20","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executeRevert","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"revertContext","type":"tuple","internalType":"struct RevertContext","components":[{"name":"asset","type":"address","internalType":"address"},{"name":"amount","type":"uint64","internalType":"uint64"},{"name":"revertMessage","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"zetaToken_","type":"address","internalType":"address"},{"name":"admin_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAndCall","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"zrc20","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAndCall","inputs":[{"name":"receiver","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"revertOptions","type":"tuple","internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"zetaToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"Called","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"zrc20","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"chainId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"receiver","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"zrc20","type":"address","indexed":false,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasfee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"message","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"revertOptions","type":"tuple","indexed":false,"internalType":"struct RevertOptions","components":[{"name":"revertAddress","type":"address","internalType":"address"},{"name":"callOnRevert","type":"bool","internalType":"bool"},{"name":"abortAddress","type":"address","internalType":"address"},{"name":"revertMessage","type":"bytes","internalType":"bytes"},{"name":"onRevertGasLimit","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EmptyMessage","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"FailedZetaSent","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InsufficientZRC20Amount","inputs":[]},{"type":"error","name":"InsufficientZetaAmount","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidTarget","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OnlyWZETAOrFungible","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"WithdrawalFailed","inputs":[]},{"type":"error","name":"ZRC20BurnFailed","inputs":[]},{"type":"error","name":"ZRC20DepositFailed","inputs":[]},{"type":"error","name":"ZRC20TransferFailed","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161393d6100fd600039600081816125ef0152818161261801526127ee015261393d6000f3fe6080604052600436106101bb5760003560e01c806352d1902d116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637c0dcb5f116100c65780637c0dcb5f146104bb5780638456cb59146104db57806391d14854146104f057806397a1cef11461055557600080fd5b806352d1902d1461044f5780635c975abb14610464578063717d335f1461049b57600080fd5b80632f2ff15d116101595780633ce4a5bc116101335780633ce4a5bc146103df5780633f4ba83a14610407578063485cc9551461041c5780634f1ef2861461043c57600080fd5b80632f2ff15d1461037f57806336568abe1461039f5780633b283933146103bf57600080fd5b80631cb5ea75116101955780631cb5ea75146102aa57806321501a95146102ca57806321e093b1146102ea578063248a9ca31461032257600080fd5b806301ffc9a7146102355780630310eb761461026a578063048ae42c1461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612d37565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612da6565b61078b565b34801561029657600080fd5b5061022e6102a5366004612f68565b610a17565b3480156102b657600080fd5b5061022e6102c5366004613028565b610b92565b3480156102d657600080fd5b5061022e6102e53660046130dd565b610e03565b3480156102f657600080fd5b5060005461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032e57600080fd5b5061037161033d366004613169565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561038b57600080fd5b5061022e61039a366004613182565b610fd0565b3480156103ab57600080fd5b5061022e6103ba366004613182565b61101a565b3480156103cb57600080fd5b5061022e6103da3660046131b2565b61106b565b3480156103eb57600080fd5b5061030a73735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041357600080fd5b5061022e61118e565b34801561042857600080fd5b5061022e610437366004613245565b6111c3565b61022e61044a366004613273565b611418565b34801561045b57600080fd5b50610371611437565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b63660046132c3565b611466565b3480156104c757600080fd5b5061022e6104d6366004613309565b61156e565b3480156104e757600080fd5b5061022e61173c565b3480156104fc57600080fd5b5061025561050b366004613182565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b5061022e610570366004613382565b61176e565b34801561058157600080fd5b50610371600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190613454565b3480156105ec57600080fd5b5061022e6105fb366004613467565b61188d565b34801561060c57600080fd5b5061022e61061b366004613467565b6119bd565b34801561062c57600080fd5b5061022e61063b366004613182565b611bcc565b34801561064c57600080fd5b506103717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004613505565b611c10565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e0610694565b6001600160a01b03841615806107fd57506001600160a01b038216155b15610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361086e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108a157506001600160a01b03821630145b156108d8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190613555565b61099a576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109df90849060040161361f565b600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050505050505050565b610a1f611e1f565b610a27610694565b8651600003610a62576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610a9c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa9878785611ea0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e9190613685565b8c8c8c8c604051610b579998979695949392919061371f565b60405180910390a350610b8960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610b9a611e1f565b610ba2610694565b8551600003610bdd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003610c18576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613555565b610d7d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610dc89594939291906137c0565b60405180910390a35050610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e50576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e58610694565b6001600160a01b038316610e98576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610ed2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f0557506001600160a01b03831630145b15610f3c576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4684846121a3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610f97928a92169089908890889060040161380c565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461100a81612371565b611014838361237b565b50505050565b6001600160a01b038116331461105c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110668282612468565b505050565b611073611e1f565b61107b610694565b85516000036110b6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036110f0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e8573735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261115d928c926001600160a01b0316918c919081908c908c9083908d9061371f565b60405180910390a3610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b881612371565b6111c061252c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120e5750825b905060008267ffffffffffffffff16600114801561122b5750303b155b905081158015611239575080155b15611270576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112d15784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ee57506001600160a01b038616155b15611325576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132d6125bc565b6113356125bc565b61133d6125c4565b6113456125d4565b61135060008761237b565b5061137b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761237b565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610b895784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114206125e4565b611429826126b4565b61143382826126bf565b5050565b60006114416127e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab146114b3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114bb610694565b6001600160a01b0382166114fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061154090849060040161361f565b600060405180830381600087803b15801561155a57600080fd5b505af1158015610dfb573d6000803e3d6000fd5b611576611e1f565b61157e610694565b83516000036115b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036115f3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ff8484612845565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190613685565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613685565b8a60405161170a979695949392919061387d565b60405180910390a35061101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61176681612371565b6111c06128b3565b611776611e1f565b61177e610694565b83516000036117b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036117f3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118118373735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261185c928a926001600160a01b0316918a9190819081908b9061387d565b60405180910390a361101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118da576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2610694565b6001600160a01b03851615806118ff57506001600160a01b038316155b15611936576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611983908990899089908890889060040161380c565b600060405180830381600087803b15801561199d57600080fd5b505af11580156119b1573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a0a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a12610694565b6001600160a01b0385161580611a2f57506001600160a01b038316155b15611a66576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611aa0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611ad357506001600160a01b03831630145b15611b0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190613555565b611936576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c0681612371565b6110148383612468565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c65610694565b6001600160a01b0383161580611c8257506001600160a01b038116155b15611cb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611cf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d2657506001600160a01b03811630145b15611d5d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de99190613555565b611066576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611ed391815260200190565b6040805180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f139190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613555565b611ff2576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af115801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613555565b6120b8576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190613555565b612172576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613555565b61226d576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611066576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c0813361292c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661245e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561245e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6125346129b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612a14565b6125cc612a14565b6106f0612a7b565b6125dc612a14565b6106f0612acc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061267d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126717f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143381612371565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612737575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261273491810190613685565b60015b61277d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127d9576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612774565b6110668383612ad4565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121768383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae9190613685565b611ea0565b6128bb610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361259e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611433576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612774565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a83612a14565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61217d612a14565b612add82612b2a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b22576110668282612bd2565b611433612c48565b806001600160a01b03163b600003612b79576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612774565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bef91906138eb565b600060405180830381855af49150503d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b5091509150612c3f858383612c80565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612c9557612c9082612cf5565b612176565b8151158015612cac57506001600160a01b0384163b155b15612cee576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612774565b5080612176565b805115612d055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217657600080fd5b6001600160a01b03811681146111c057600080fd5b600060608284031215612da057600080fd5b50919050565b60008060008060808587031215612dbc57600080fd5b8435612dc781612d79565b9350602085013592506040850135612dde81612d79565b9150606085013567ffffffffffffffff811115612dfa57600080fd5b612e0687828801612d8e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5257600080fd5b813567ffffffffffffffff811115612e6c57612e6c612e12565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ed857612ed8612e12565b604052818152838201602001851015612ef057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f1f57600080fd5b50813567ffffffffffffffff811115612f3757600080fd5b602083019150836020828501011115612f4f57600080fd5b9250929050565b600060a08284031215612da057600080fd5b600080600080600080600060c0888a031215612f8357600080fd5b873567ffffffffffffffff811115612f9a57600080fd5b612fa68a828b01612e41565b975050602088013595506040880135612fbe81612d79565b9450606088013567ffffffffffffffff811115612fda57600080fd5b612fe68a828b01612f0d565b9095509350506080880135915060a088013567ffffffffffffffff81111561300d57600080fd5b6130198a828b01612f56565b91505092959891949750929550565b60008060008060008060a0878903121561304157600080fd5b863567ffffffffffffffff81111561305857600080fd5b61306489828a01612e41565b965050602087013561307581612d79565b9450604087013567ffffffffffffffff81111561309157600080fd5b61309d89828a01612f0d565b90955093505060608701359150608087013567ffffffffffffffff8111156130c457600080fd5b6130d089828a01612f56565b9150509295509295509295565b6000806000806000608086880312156130f557600080fd5b853567ffffffffffffffff81111561310c57600080fd5b61311888828901612d8e565b95505060208601359350604086013561313081612d79565b9250606086013567ffffffffffffffff81111561314c57600080fd5b61315888828901612f0d565b969995985093965092949392505050565b60006020828403121561317b57600080fd5b5035919050565b6000806040838503121561319557600080fd5b8235915060208301356131a781612d79565b809150509250929050565b60008060008060008060a087890312156131cb57600080fd5b863567ffffffffffffffff8111156131e257600080fd5b6131ee89828a01612e41565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561321957600080fd5b61322589828a01612f0d565b909450925050608087013567ffffffffffffffff8111156130c457600080fd5b6000806040838503121561325857600080fd5b823561326381612d79565b915060208301356131a781612d79565b6000806040838503121561328657600080fd5b823561329181612d79565b9150602083013567ffffffffffffffff8111156132ad57600080fd5b6132b985828601612e41565b9150509250929050565b600080604083850312156132d657600080fd5b82356132e181612d79565b9150602083013567ffffffffffffffff8111156132fd57600080fd5b6132b985828601612d8e565b6000806000806080858703121561331f57600080fd5b843567ffffffffffffffff81111561333657600080fd5b61334287828801612e41565b94505060208501359250604085013561335a81612d79565b9150606085013567ffffffffffffffff81111561337657600080fd5b612e0687828801612f56565b6000806000806080858703121561339857600080fd5b843567ffffffffffffffff8111156133af57600080fd5b6133bb87828801612e41565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561337657600080fd5b60005b838110156134015781810151838201526020016133e9565b50506000910152565b600081518084526134228160208601602086016133e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612176602083018461340a565b60008060008060008060a0878903121561348057600080fd5b863567ffffffffffffffff81111561349757600080fd5b6134a389828a01612d8e565b96505060208701356134b481612d79565b94506040870135935060608701356134cb81612d79565b9250608087013567ffffffffffffffff8111156134e757600080fd5b6134f389828a01612f0d565b979a9699509497509295939492505050565b60008060006060848603121561351a57600080fd5b833561352581612d79565b925060208401359150604084013561353c81612d79565b809150509250925092565b80151581146111c057600080fd5b60006020828403121561356757600080fd5b815161217681613547565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135a757600080fd5b830160208101925035905067ffffffffffffffff8111156135c757600080fd5b803603821315612f4f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561363081612d79565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461365c57600080fd5b80604085015250506136716040840184613572565b606080850152612c3f6080850182846135d6565b60006020828403121561369757600080fd5b5051919050565b600081356136ab81612d79565b6001600160a01b0316835260208201356136c481613547565b1515602084015260408201356136d981612d79565b6001600160a01b031660408401526136f46060830183613572565b60a0606086015261370960a0860182846135d6565b6080948501359590940194909452509092915050565b6101008152600061373461010083018c61340a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526137688187896135d6565b90508460c084015282810360e0840152613782818561369e565b9c9b505050505050505050505050565b600080604083850312156137a557600080fd5b82516137b081612d79565b6020939093015192949293505050565b6080815260006137d3608083018861340a565b82810360208401526137e68187896135d6565b90508460408401528281036060840152613800818561369e565b98975050505050505050565b60808152600061381c8788613572565b6060608085015261383160e0850182846135d6565b915050602088013561384281612d79565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138008185876135d6565b6101008152600061389261010083018a61340a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506138dd602082018561369e565b9a9950505050505050505050565b600082516138fd8184602087016133e6565b919091019291505056fea26469706673582212209729ede334f07afe016eab9b4d72c7ce168ef243ba933f0783bfed07e3f86edf64736f6c634300081a0033","sourceMap":"958:13493:10:-:0;;;1171:4:42;1128:48;;1851:53:10;;;;;;;;;-1:-1:-1;1875:22:10;:20;:22::i;:::-;958:13493;;7711:422:41;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:41;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:41;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:41;-1:-1:-1;;;;;8035:33:41;;;;;8087:29;;158:50:108;;;8087:29:41;;146:2:108;131:18;8087:29:41;;;;;;;7981:146;7760:373;7711:422::o;14:200:108:-;958:13493:10;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101bb5760003560e01c806352d1902d116100ec578063a217fddf1161008a578063c39aca3711610064578063c39aca3714610600578063d547741f14610620578063e63ab1e914610640578063f45346dc1461067457600080fd5b8063a217fddf14610575578063ad3cb1cc1461058a578063bcf7f32b146105e057600080fd5b80637c0dcb5f116100c65780637c0dcb5f146104bb5780638456cb59146104db57806391d14854146104f057806397a1cef11461055557600080fd5b806352d1902d1461044f5780635c975abb14610464578063717d335f1461049b57600080fd5b80632f2ff15d116101595780633ce4a5bc116101335780633ce4a5bc146103df5780633f4ba83a14610407578063485cc9551461041c5780634f1ef2861461043c57600080fd5b80632f2ff15d1461037f57806336568abe1461039f5780633b283933146103bf57600080fd5b80631cb5ea75116101955780631cb5ea75146102aa57806321501a95146102ca57806321e093b1146102ea578063248a9ca31461032257600080fd5b806301ffc9a7146102355780630310eb761461026a578063048ae42c1461028a57600080fd5b36610230576101c8610694565b6000546001600160a01b031633148015906101f757503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561022e576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561024157600080fd5b50610255610250366004612d37565b6106f2565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061022e610285366004612da6565b61078b565b34801561029657600080fd5b5061022e6102a5366004612f68565b610a17565b3480156102b657600080fd5b5061022e6102c5366004613028565b610b92565b3480156102d657600080fd5b5061022e6102e53660046130dd565b610e03565b3480156102f657600080fd5b5060005461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561032e57600080fd5b5061037161033d366004613169565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610261565b34801561038b57600080fd5b5061022e61039a366004613182565b610fd0565b3480156103ab57600080fd5b5061022e6103ba366004613182565b61101a565b3480156103cb57600080fd5b5061022e6103da3660046131b2565b61106b565b3480156103eb57600080fd5b5061030a73735b14bb79463307aacbed86daf3322b1e6226ab81565b34801561041357600080fd5b5061022e61118e565b34801561042857600080fd5b5061022e610437366004613245565b6111c3565b61022e61044a366004613273565b611418565b34801561045b57600080fd5b50610371611437565b34801561047057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610255565b3480156104a757600080fd5b5061022e6104b63660046132c3565b611466565b3480156104c757600080fd5b5061022e6104d6366004613309565b61156e565b3480156104e757600080fd5b5061022e61173c565b3480156104fc57600080fd5b5061025561050b366004613182565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561056157600080fd5b5061022e610570366004613382565b61176e565b34801561058157600080fd5b50610371600081565b34801561059657600080fd5b506105d36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102619190613454565b3480156105ec57600080fd5b5061022e6105fb366004613467565b61188d565b34801561060c57600080fd5b5061022e61061b366004613467565b6119bd565b34801561062c57600080fd5b5061022e61063b366004613182565b611bcc565b34801561064c57600080fd5b506103717f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561068057600080fd5b5061022e61068f366004613505565b611c10565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156106f0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061078557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e0610694565b6001600160a01b03841615806107fd57506001600160a01b038216155b15610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361086e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab14806108a157506001600160a01b03821630145b156108d8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015610940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109649190613555565b61099a576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de0906109df90849060040161361f565b600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050505050505050565b610a1f611e1f565b610a27610694565b8651600003610a62576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003610a9c576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610aa9878785611ea0565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e9190613685565b8c8c8c8c604051610b579998979695949392919061371f565b60405180910390a350610b8960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610b9a611e1f565b610ba2610694565b8551600003610bdd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003610c18576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffc5fecd50000000000000000000000000000000000000000000000000000000081526004810183905260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190613555565b610d7d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f6c6abd640fc6a0ef7cf2bc54b246b42d5c2629c30be1e24fea4a58157a7728cf8a89898989604051610dc89594939291906137c0565b60405180910390a35050610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e50576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e58610694565b6001600160a01b038316610e98576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003610ed2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610f0557506001600160a01b03831630145b15610f3c576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4684846121a3565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610f97928a92169089908890889060040161380c565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461100a81612371565b611014838361237b565b50505050565b6001600160a01b038116331461105c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110668282612468565b505050565b611073611e1f565b61107b610694565b85516000036110b6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846000036110f0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e8573735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051869233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261115d928c926001600160a01b0316918c919081908c908c9083908d9061371f565b60405180910390a3610dfb60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6111b881612371565b6111c061252c565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561120e5750825b905060008267ffffffffffffffff16600114801561122b5750303b155b905081158015611239575080155b15611270576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156112d15784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03871615806112ee57506001600160a01b038616155b15611325576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61132d6125bc565b6113356125bc565b61133d6125c4565b6113456125d4565b61135060008761237b565b5061137b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761237b565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610b895784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b6114206125e4565b611429826126b4565b61143382826126bf565b5050565b60006114416127e3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab146114b3576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114bb610694565b6001600160a01b0382166114fb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de09061154090849060040161361f565b600060405180830381600087803b15801561155a57600080fd5b505af1158015610dfb573d6000803e3d6000fd5b611576611e1f565b61157e610694565b83516000036115b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036115f3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115ff8484612845565b90506000336001600160a01b03167fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116949190613685565b8a6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190613685565b8a60405161170a979695949392919061387d565b60405180910390a35061101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61176681612371565b6111c06128b3565b611776611e1f565b61177e610694565b83516000036117b9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036117f3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118118373735b14bb79463307aacbed86daf3322b1e6226ab6121a3565b60008054604051849233927fda1215b0949ddb309fe466fa9e70e861a16538f11b8ecdb05c217d4d8677ed2d9261185c928a926001600160a01b0316918a9190819081908b9061387d565b60405180910390a361101460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146118da576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118e2610694565b6001600160a01b03851615806118ff57506001600160a01b038316155b15611936576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e90611983908990899089908890889060040161380c565b600060405180830381600087803b15801561199d57600080fd5b505af11580156119b1573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a0a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a12610694565b6001600160a01b0385161580611a2f57506001600160a01b038316155b15611a66576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611aa0576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611ad357506001600160a01b03831630145b15611b0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b969190613555565b611936576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c0681612371565b6110148383612468565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c5d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c65610694565b6001600160a01b0383161580611c8257506001600160a01b038116155b15611cb9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611cf3576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d2657506001600160a01b03811630145b15611d5d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de99190613555565b611066576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611ed391815260200190565b6040805180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f139190613792565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613555565b611ff2576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af115801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190613555565b6120b8576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c9190613555565b612172576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122379190613555565b61226d576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612331576040519150601f19603f3d011682016040523d82523d6000602084013e612336565b606091505b5050905080611066576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c0813361292c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661245e576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556124143390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610785565b6000915050610785565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561245e576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610785565b6125346129b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6106f0612a14565b6125cc612a14565b6106f0612a7b565b6125dc612a14565b6106f0612acc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061267d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126717f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143381612371565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612737575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261273491810190613685565b60015b61277d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146127d9576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612774565b6110668383612ad4565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121768383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae9190613685565b611ea0565b6128bb610694565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361259e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611433576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612774565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166106f0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106f0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a83612a14565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61217d612a14565b612add82612b2a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b22576110668282612bd2565b611433612c48565b806001600160a01b03163b600003612b79576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612774565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bef91906138eb565b600060405180830381855af49150503d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b5091509150612c3f858383612c80565b95945050505050565b34156106f0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612c9557612c9082612cf5565b612176565b8151158015612cac57506001600160a01b0384163b155b15612cee576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612774565b5080612176565b805115612d055780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612d4957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217657600080fd5b6001600160a01b03811681146111c057600080fd5b600060608284031215612da057600080fd5b50919050565b60008060008060808587031215612dbc57600080fd5b8435612dc781612d79565b9350602085013592506040850135612dde81612d79565b9150606085013567ffffffffffffffff811115612dfa57600080fd5b612e0687828801612d8e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612e5257600080fd5b813567ffffffffffffffff811115612e6c57612e6c612e12565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612ed857612ed8612e12565b604052818152838201602001851015612ef057600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612f1f57600080fd5b50813567ffffffffffffffff811115612f3757600080fd5b602083019150836020828501011115612f4f57600080fd5b9250929050565b600060a08284031215612da057600080fd5b600080600080600080600060c0888a031215612f8357600080fd5b873567ffffffffffffffff811115612f9a57600080fd5b612fa68a828b01612e41565b975050602088013595506040880135612fbe81612d79565b9450606088013567ffffffffffffffff811115612fda57600080fd5b612fe68a828b01612f0d565b9095509350506080880135915060a088013567ffffffffffffffff81111561300d57600080fd5b6130198a828b01612f56565b91505092959891949750929550565b60008060008060008060a0878903121561304157600080fd5b863567ffffffffffffffff81111561305857600080fd5b61306489828a01612e41565b965050602087013561307581612d79565b9450604087013567ffffffffffffffff81111561309157600080fd5b61309d89828a01612f0d565b90955093505060608701359150608087013567ffffffffffffffff8111156130c457600080fd5b6130d089828a01612f56565b9150509295509295509295565b6000806000806000608086880312156130f557600080fd5b853567ffffffffffffffff81111561310c57600080fd5b61311888828901612d8e565b95505060208601359350604086013561313081612d79565b9250606086013567ffffffffffffffff81111561314c57600080fd5b61315888828901612f0d565b969995985093965092949392505050565b60006020828403121561317b57600080fd5b5035919050565b6000806040838503121561319557600080fd5b8235915060208301356131a781612d79565b809150509250929050565b60008060008060008060a087890312156131cb57600080fd5b863567ffffffffffffffff8111156131e257600080fd5b6131ee89828a01612e41565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561321957600080fd5b61322589828a01612f0d565b909450925050608087013567ffffffffffffffff8111156130c457600080fd5b6000806040838503121561325857600080fd5b823561326381612d79565b915060208301356131a781612d79565b6000806040838503121561328657600080fd5b823561329181612d79565b9150602083013567ffffffffffffffff8111156132ad57600080fd5b6132b985828601612e41565b9150509250929050565b600080604083850312156132d657600080fd5b82356132e181612d79565b9150602083013567ffffffffffffffff8111156132fd57600080fd5b6132b985828601612d8e565b6000806000806080858703121561331f57600080fd5b843567ffffffffffffffff81111561333657600080fd5b61334287828801612e41565b94505060208501359250604085013561335a81612d79565b9150606085013567ffffffffffffffff81111561337657600080fd5b612e0687828801612f56565b6000806000806080858703121561339857600080fd5b843567ffffffffffffffff8111156133af57600080fd5b6133bb87828801612e41565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561337657600080fd5b60005b838110156134015781810151838201526020016133e9565b50506000910152565b600081518084526134228160208601602086016133e6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612176602083018461340a565b60008060008060008060a0878903121561348057600080fd5b863567ffffffffffffffff81111561349757600080fd5b6134a389828a01612d8e565b96505060208701356134b481612d79565b94506040870135935060608701356134cb81612d79565b9250608087013567ffffffffffffffff8111156134e757600080fd5b6134f389828a01612f0d565b979a9699509497509295939492505050565b60008060006060848603121561351a57600080fd5b833561352581612d79565b925060208401359150604084013561353c81612d79565b809150509250925092565b80151581146111c057600080fd5b60006020828403121561356757600080fd5b815161217681613547565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126135a757600080fd5b830160208101925035905067ffffffffffffffff8111156135c757600080fd5b803603821315612f4f57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000823561363081612d79565b6001600160a01b038116602084015250602083013567ffffffffffffffff811680821461365c57600080fd5b80604085015250506136716040840184613572565b606080850152612c3f6080850182846135d6565b60006020828403121561369757600080fd5b5051919050565b600081356136ab81612d79565b6001600160a01b0316835260208201356136c481613547565b1515602084015260408201356136d981612d79565b6001600160a01b031660408401526136f46060830183613572565b60a0606086015261370960a0860182846135d6565b6080948501359590940194909452509092915050565b6101008152600061373461010083018c61340a565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a08401526137688187896135d6565b90508460c084015282810360e0840152613782818561369e565b9c9b505050505050505050505050565b600080604083850312156137a557600080fd5b82516137b081612d79565b6020939093015192949293505050565b6080815260006137d3608083018861340a565b82810360208401526137e68187896135d6565b90508460408401528281036060840152613800818561369e565b98975050505050505050565b60808152600061381c8788613572565b6060608085015261383160e0850182846135d6565b915050602088013561384281612d79565b6001600160a01b0390811660a085015260408981013560c08601529088166020850152830186905282810360608401526138008185876135d6565b6101008152600061389261010083018a61340a565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a0850152600082528560c08501526020810160e0850152506138dd602082018561369e565b9a9950505050505050505050565b600082516138fd8184602087016133e6565b919091019291505056fea26469706673582212209729ede334f07afe016eab9b4d72c7ce168ef243ba933f0783bfed07e3f86edf64736f6c634300081a0033","sourceMap":"958:13493:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2316:19:44;:17;:19::i;:::-;2885:9:10::1;::::0;-1:-1:-1;;;;;2885:9:10::1;2871:10;:23;::::0;::::1;::::0;:64:::1;;-1:-1:-1::0;2898:10:10::1;1331:42;2898:37;;2871:64;2867:98;;;2944:21;;;;;;;;;;;;;;2867:98;958:13493:::0;;;;;3443:202:40;;;;;;;;;;-1:-1:-1;3443:202:40;;;;;:::i;:::-;;:::i;:::-;;;516:14:108;;509:22;491:41;;479:2;464:18;3443:202:40;;;;;;;;13852:597:10;;;;;;;;;;-1:-1:-1;13852:597:10;;;;;:::i;:::-;;:::i;6348:749::-;;;;;;;;;;-1:-1:-1;6348:749:10;;;;;:::i;:::-;;:::i;9116:688::-;;;;;;;;;;-1:-1:-1;9116:688:10;;;;;:::i;:::-;;:::i;12555:557::-;;;;;;;;;;-1:-1:-1;12555:557:10;;;;;:::i;:::-;;:::i;1426:24::-;;;;;;;;;;-1:-1:-1;1426:24:10;;;;-1:-1:-1;;;;;1426:24:10;;;;;;-1:-1:-1;;;;;6694:55:108;;;6676:74;;6664:2;6649:18;1426:24:10;6530:226:108;4759:191:40;;;;;;;;;;-1:-1:-1;4759:191:40;;;;;:::i;:::-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;;4759:191;;;;7138:25:108;;;7126:2;7111:18;4759:191:40;6992:177:108;5246:136:40;;;;;;;;;;-1:-1:-1;5246:136:40;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:40;;;;;:::i;:::-;;:::i;8215:547:10:-;;;;;;;;;;-1:-1:-1;8215:547:10;;;;;:::i;:::-;;:::i;1281:92::-;;;;;;;;;;;;1331:42;1281:92;;3123:77;;;;;;;;;;;;;:::i;2067:439::-;;;;;;;;;;-1:-1:-1;2067:439:10;;;;;:::i;:::-;;:::i;4158:214:42:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;2692:145:44:-;;;;;;;;;;-1:-1:-1;1270:23:44;2821:9;;;2692:145;;13292:236:10;;;;;;;;;;-1:-1:-1;13292:236:10;;;;;:::i;:::-;;:::i;5259:674::-;;;;;;;;;;-1:-1:-1;5259:674:10;;;;;:::i;:::-;;:::i;3010:73::-;;;;;;;;;;;;;:::i;3732:207:40:-;;;;;;;;;;-1:-1:-1;3732:207:40;;;;;:::i;:::-;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;;;;3732:207;7331:503:10;;;;;;;;;;-1:-1:-1;7331:503:10;;;;;:::i;:::-;;:::i;2317:49:40:-;;;;;;;;;;-1:-1:-1;2317:49:40;2362:4;2317:49;;1819:58:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10819:397:10:-;;;;;;;;;;-1:-1:-1;10819:397:10;;;;;:::i;:::-;;:::i;11601:642::-;;;;;;;;;;-1:-1:-1;11601:642:10;;;;;:::i;:::-;;:::i;5662:138:40:-;;;;;;;;;;-1:-1:-1;5662:138:40;;;;;:::i;:::-;;:::i;1510:62:10:-;;;;;;;;;;;;1548:24;1510:62;;10042:426;;;;;;;;;;-1:-1:-1;10042:426:10;;;;;:::i;:::-;;:::i;2905:128:44:-;1270:23;2821:9;;;2966:61;;;3001:15;;;;;;;;;;;;;;2966:61;2905:128::o;3443:202:40:-;3528:4;3551:47;;;3566:32;3551:47;;:87;;-1:-1:-1;1148:25:46;1133:40;;;;3602:36:40;3544:94;3443:202;-1:-1:-1;;3443:202:40:o;13852:597:10:-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;14079:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;14102:20:10;::::2;::::0;14079:43:::2;14075:69;;;14131:13;;;;;;;;;;;;;;14075:69;14158:6;14168:1;14158:11:::0;14154:49:::2;;14178:25;;;;;;;;;;;;;;14154:49;-1:-1:-1::0;;;;;14217:33:10;::::2;1331:42;14217:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;14254:23:10;::::2;14272:4;14254:23;14217:60;14213:88;;;14286:15;;;;;;;;;;;;;;14213:88;14317:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;14317:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;14317:21:10;::::2;::::0;::::2;::::0;14234:18:108;;14317:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14312:71;;14363:20;;;;;;;;;;;;;;14312:71;14393:49;::::0;;;;-1:-1:-1;;;;;14393:34:10;::::2;::::0;::::2;::::0;:49:::2;::::0;14428:13;;14393:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13852:597:::0;;;;:::o;6348:749::-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;6639:8:10::2;:15;6658:1;6639:20:::0;6635:46:::2;;6668:13;;;;;;;;;;;;;;6635:46;6695:6;6705:1;6695:11:::0;6691:49:::2;;6715:25;;;;;;;;;;;;;;6691:49;6751:14;6768:51;6795:6;6803:5;6810:8;6768:26;:51::i;:::-;6751:68;;6881:1;6857:10;-1:-1:-1::0;;;;;6834:256:10::2;;6896:8;6918:5;6937:6;6957;6984:5;-1:-1:-1::0;;;;;6977:31:10::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7024:7;;7045:8;7067:13;6834:256;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6625:472;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3293:20;6348:749:10;;;;;;;:::o;9116:688::-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;9372:8:10::2;:15;9391:1;9372:20:::0;9368:46:::2;;9401:13;;;;;;;;;;;;;;9368:46;9446:1;9428:19:::0;;;9424:46:::2;;9456:14;;;;;;;;;;;;;;9424:46;9518:50;::::0;;;;::::2;::::0;::::2;7138:25:108::0;;;9482:16:10::2;::::0;;;-1:-1:-1;;;;;9518:40:10;::::2;::::0;::::2;::::0;7111:18:108;;9518:50:10::2;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9583:74;::::0;;;;9613:10:::2;9583:74;::::0;::::2;19435::108::0;1331:42:10::2;19525:18:108::0;;;19518:83;19617:18;;;19610:34;;;9481:87:10;;-1:-1:-1;9481:87:10;-1:-1:-1;;;;;;9583:29:10;::::2;::::0;::::2;::::0;19408:18:108;;9583:74:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9578:135;;9680:22;;;;;;;;;;;;;;9578:135;9747:5;-1:-1:-1::0;;;;;9728:69:10::2;9735:10;-1:-1:-1::0;;;;;9728:69:10::2;;9754:8;9764:7;;9773:8;9783:13;9728:69;;;;;;;;;;:::i;:::-;;;;;;;;9358:446;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3293:20;9116:688:10;;;;;;:::o;12555:557::-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;12778:20:10;::::2;12774:46;;12807:13;;;;;;;;;;;;;;12774:46;12834:6;12844:1;12834:11:::0;12830:48:::2;;12854:24;;;;;;;;;;;;;;12830:48;-1:-1:-1::0;;;;;12892:33:10;::::2;1331:42;12892:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;12929:23:10;::::2;12947:4;12929:23;12892:60;12888:88;;;12961:15;;;;;;;;;;;;;;12888:88;12987:29;13001:6;13009;12987:13;:29::i;:::-;13078:9;::::0;13026:79:::2;::::0;;;;-1:-1:-1;;;;;13026:42:10;;::::2;::::0;::::2;::::0;:79:::2;::::0;13069:7;;13078:9:::2;::::0;13089:6;;13097:7;;;;13026:79:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12555:557:::0;;;;;:::o;5246:136:40:-;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:40;;966:10:43;6441:34:40;6437:102;;6498:30;;;;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8215:547:10:-;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;8482:8:10::2;:15;8501:1;8482:20:::0;8478:46:::2;;8511:13;;;;;;;;;;;;;;8478:46;8538:6;8548:1;8538:11:::0;8534:48:::2;;8558:24;;;;;;;;;;;;;;8534:48;8593:46;8607:6;1331:42;8593:13;:46::i;:::-;8703:9;::::0;;8654:101:::2;::::0;8676:7;;8664:10:::2;::::0;8654:101:::2;::::0;::::2;::::0;8685:8;;-1:-1:-1;;;;;8703:9:10::2;::::0;8715:6;;8703:9;;;8729:7;;;;8703:9;;8741:13;;8654:101:::2;:::i;:::-;;;;;;;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3123:77:10;1548:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3183:10:10::1;:8;:10::i;:::-;3123:77:::0;:::o;2067:439::-;8870:21:41;4302:15;;;;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:41;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;;;;;;;;;;;;;4851:91;4951:18;;;;4968:1;4951:18;;;4979:67;;;;5013:22;;;;;;;;4979:67;-1:-1:-1;;;;;2156:24:10;::::1;::::0;;:48:::1;;-1:-1:-1::0;;;;;;2184:20:10;::::1;::::0;2156:48:::1;2152:99;;;2227:13;;;;;;;;;;;;;;2152:99;2260:24;:22;:24::i;:::-;2294:22;:20;:22::i;:::-;2326:17;:15;:17::i;:::-;2353:24;:22;:24::i;:::-;2388:38;2362:4:40;2419:6:10::0;2388:10:::1;:38::i;:::-;;2436:31;1548:24;2460:6;2436:10;:31::i;:::-;-1:-1:-1::0;2477:9:10::1;:22:::0;;;::::1;-1:-1:-1::0;;;;;2477:22:10;::::1;;::::0;;5066:101:41;;;;5100:23;;;;;;5142:14;;-1:-1:-1;22697:50:108;;5142:14:41;;22685:2:108;22670:18;5142:14:41;;;;;;;4092:1081;;;;;2067:439:10;;:::o;4158:214:42:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;:::-;4158:214:::0;;:::o;3705:134::-;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;1327:66:54::1;3705:134:42::0;:::o;13292:236:10:-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;13419:20:10;::::2;13415:46;;13448:13;;;;;;;;;;;;;;13415:46;13472:49;::::0;;;;-1:-1:-1;;;;;13472:34:10;::::2;::::0;::::2;::::0;:49:::2;::::0;13507:13;;13472:49:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;5259:674:::0;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;5485:8:10::2;:15;5504:1;5485:20:::0;5481:46:::2;;5514:13;;;;;;;;;;;;;;5481:46;5541:6;5551:1;5541:11:::0;5537:49:::2;;5561:25;;;;;;;;;;;;;;5537:49;5597:14;5614:29;5629:6;5637:5;5614:14;:29::i;:::-;5597:46;;5705:1;5681:10;-1:-1:-1::0;;;;;5658:268:10::2;;5720:8;5742:5;5761:6;5781;5808:5;-1:-1:-1::0;;;;;5801:31:10::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5871:5;-1:-1:-1::0;;;;;5864:23:10::2;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5903:13;5658:268;;;;;;;;;;;;:::i;:::-;;;;;;;;5471:462;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;3010:73:10;1548:24;3191:16:40;3202:4;3191:10;:16::i;:::-;3068:8:10::1;:6;:8::i;7331:503::-:0;3251:21:45;:19;:21::i;:::-;2316:19:44::1;:17;:19::i;:::-;7559:8:10::2;:15;7578:1;7559:20:::0;7555:46:::2;;7588:13;;;;;;;;;;;;;;7555:46;7615:6;7625:1;7615:11:::0;7611:48:::2;;7635:24;;;;;;;;;;;;;;7611:48;7670:46;7684:6;1331:42;7670:13;:46::i;:::-;7780:9;::::0;;7731:96:::2;::::0;7753:7;;7741:10:::2;::::0;7731:96:::2;::::0;::::2;::::0;7762:8;;-1:-1:-1;;;;;7780:9:10::2;::::0;7792:6;;7780:9;;;;;7813:13;;7731:96:::2;:::i;:::-;;;;;;;;3293:20:45::0;1805:1;2388:30;3969:23;3716:283;10819:397:10;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;11058:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;11081:20:10;::::2;::::0;11058:43:::2;11054:69;;;11110:13;;;;;;;;;;;;;;11054:69;11134:75;::::0;;;;-1:-1:-1;;;;;11134:42:10;::::2;::::0;::::2;::::0;:75:::2;::::0;11177:7;;11186:5;;11193:6;;11201:7;;;;11134:75:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10819:397:::0;;;;;;:::o;11601:642::-;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;11847:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;11870:20:10;::::2;::::0;11847:43:::2;11843:69;;;11899:13;;;;;;;;;;;;;;11843:69;11926:6;11936:1;11926:11:::0;11922:49:::2;;11946:25;;;;;;;;;;;;;;11922:49;-1:-1:-1::0;;;;;11985:33:10;::::2;1331:42;11985:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;12022:23:10;::::2;12040:4;12022:23;11985:60;11981:88;;;12054:15;;;;;;;;;;;;;;11981:88;12085:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;12085:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;12085:21:10;::::2;::::0;::::2;::::0;14234:18:108;;12085:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12080:71;;12131:20;;;;;;;;;;;;;;5662:138:40::0;4824:7;4919:14;;;2920:28;4919:14;;;;;:24;;;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;10042:426:10:-:0;1677:10;1331:42;1677:37;1673:102;;1737:27;;;;;;;;;;;;;;1673:102;2316:19:44::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;10156:19:10;::::2;::::0;;:43:::2;;-1:-1:-1::0;;;;;;10179:20:10;::::2;::::0;10156:43:::2;10152:69;;;10208:13;;;;;;;;;;;;;;10152:69;10235:6;10245:1;10235:11:::0;10231:49:::2;;10255:25;;;;;;;;;;;;;;10231:49;-1:-1:-1::0;;;;;10295:33:10;::::2;1331:42;10295:33;::::0;:60:::2;;-1:-1:-1::0;;;;;;10332:23:10;::::2;10350:4;10332:23;10295:60;10291:88;;;10364:15;;;;;;;;;;;;;;10291:88;10395:37;::::0;;;;-1:-1:-1;;;;;14279:55:108;;;10395:37:10::2;::::0;::::2;14261:74:108::0;14351:18;;;14344:34;;;10395:21:10;::::2;::::0;::::2;::::0;14234:18:108;;10395:37:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10390:71;;10441:20;;;;;;;;;;;;;;3326:384:45::0;2388:30;3526:9;;:20;;3522:88;;3569:30;;;;;;;;;;;;;;3522:88;1847:1;3684:19;;3326:384::o;3900:583:10:-;4003:7;4023:16;4041:14;4066:5;-1:-1:-1;;;;;4059:40:10;;4100:8;4059:50;;;;;;;;;;;;;7138:25:108;;7126:2;7111:18;;6992:177;4059:50:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4124:74;;;;;4154:10;4124:74;;;19435::108;1331:42:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;4022:87:10;;-1:-1:-1;4022:87:10;-1:-1:-1;;;;;;4124:29:10;;;;;19408:18:108;;4124:74:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4119:135;;4221:22;;;;;;;;;;;;;;4119:135;4269:61;;;;;4296:10;4269:61;;;19435:74:108;4316:4:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;-1:-1:-1;;;;;4269:26:10;;;;;19408:18:108;;4269:61:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4264:121;;4353:21;;;;;;;;;;;;;;4264:121;4400:26;;;;;;;;7138:25:108;;;-1:-1:-1;;;;;4400:18:10;;;;;7111::108;;4400:26:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4395:57;;4435:17;;;;;;;;;;;;;;4395:57;4470:6;-1:-1:-1;;3900:583:10;;;;;;:::o;3716:283:45:-;1805:1;2388:30;3969:23;3716:283::o;4658:313:10:-;4740:9;;4733:65;;;;;4764:10;4733:65;;;19435:74:108;4784:4:10;19525:18:108;;;19518:83;19617:18;;;19610:34;;;-1:-1:-1;;;;;4740:9:10;;;;4733:30;;19408:18:108;;4733:65:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4728:95;;4807:16;;;;;;;;;;;;;;4728:95;4840:9;;4833:34;;;;;;;;7138:25:108;;;-1:-1:-1;;;;;4840:9:10;;;;4833:26;;7111:18:108;;4833:34:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:9;4892:2;-1:-1:-1;;;;;4892:7:10;4908:6;4892:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:43;;;4935:4;4930:34;;4948:16;;;;;;;;;;;;;;4148:103:40;4214:30;4225:4;966:10:43;4214::40;:30::i;7270:387::-;7347:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:40;;;;;;;;;:38;;;;7509:4;7475:38;;;7559:12;966:10:43;;887:96;7559:12:40;-1:-1:-1;;;;;7532:40:40;7550:7;-1:-1:-1;;;;;7532:40:40;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:40;;;;;;;;;;:39;;;;;;8155:40;966:10:43;;8097:14:40;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;3674:178:44;2563:16;:14;:16::i;:::-;1270:23;3791:17;;;::::1;::::0;;3823:22:::1;966:10:43::0;3832:12:44::1;3823:22;::::0;-1:-1:-1;;;;;6694:55:108;;;6676:74;;6664:2;6649:18;3823:22:44::1;;;;;;;3722:130;3674:178::o:0;2968:67:42:-;6931:20:41;:18;:20::i;1836:97:44:-;6931:20:41;:18;:20::i;:::-;1899:27:44::1;:25;:27::i;2540:111:45:-:0;6931:20:41;:18;:20::i;:::-;2610:34:45::1;:32;:34::i;4599:312:42:-:0;4679:4;-1:-1:-1;;;;;4688:6:42;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:42;:32;1327:66:54;2035:53;-1:-1:-1;;;;;2035:53:54;;1957:138;4749:32:42;-1:-1:-1;;;;;4749:42:42;;;4671:120;4654:251;;;4865:29;;;;;;;;;;;;;;2637:104:10;2362:4:40;3191:16;2362:4;3191:10;:16::i;6052:538:42:-;6169:17;-1:-1:-1;;;;;6151:50:42;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:42;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;;;;-1:-1:-1;;;;;6694:55:108;;6513:60:42;;;6676:74:108;6649:18;;6513:60:42;;;;;;;;6147:437;1327:66:54;6245:40:42;;6241:120;;6312:34;;;;;;;;7138:25:108;;;7111:18;;6312:34:42;6992:177:108;6241:120:42;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:42;5094:23;;5090:145;;5195:29;;;;;;;;;;;;;;3420:210:10;3493:7;3555:68;3582:6;3590:5;3604;-1:-1:-1;;;;;3597:23:10;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3555:26;:68::i;3366:176:44:-;2316:19;:17;:19::i;:::-;1270:23;3484:16;;;::::1;3496:4;3484:16;::::0;;3515:20:::1;966:10:43::0;3522:12:44::1;887:96:43::0;4381:197:40;3809:4;3901:14;;;2920:28;3901:14;;;;;;;;-1:-1:-1;;;;;3901:31:40;;;;;;;;;;;;4464:108;;4514:47;;;;;-1:-1:-1;;;;;14279:55:108;;4514:47:40;;;14261:74:108;14351:18;;;14344:34;;;14234:18;;4514:47:40;14087:297:108;3105:126:44;1270:23;2821:9;;;3163:62;;3199:15;;;;;;;;;;;;;;7084:141:41;8870:21;8560:40;;;;;;7146:73;;7191:17;;;;;;;;;;;;;;1939:156:44;6931:20:41;:18;:20::i;:::-;1270:23:44;2071:17;;;::::1;::::0;;1939:156::o;2657:183:45:-;6931:20:41;:18;:20::i;2779:335:54:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:54;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:54;;2296:1;2263:34;2259:119;;2320:47;;;;;-1:-1:-1;;;;;6694:55:108;;2320:47:54;;;6676:74:108;6649:18;;2320:47:54;6530:226:108;2259:119:54;1327:66;2387:73;;;;-1:-1:-1;;;;;2387:73:54;;;;;;;;;;2186:281::o;4106:253:67:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:67;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:67:o;6598:122:54:-;6648:9;:13;6644:70;;6684:19;;;;;;;;;;;;;;4625:582:67;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:67;;;:23;5045:49;5041:119;;;5121:24;;;;;-1:-1:-1;;;;;6694:55:108;;5121:24:67;;;6676:74:108;6649:18;;5121:24:67;6530:226:108;5041:119:67;-1:-1:-1;5180:10:67;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:108;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:154;-1:-1:-1;;;;;622:5:108;618:54;611:5;608:65;598:93;;687:1;684;677:12;702:161;768:5;813:2;804:6;799:3;795:16;791:25;788:45;;;829:1;826;819:12;788:45;-1:-1:-1;851:6:108;702:161;-1:-1:-1;702:161:108:o;868:763::-;985:6;993;1001;1009;1062:3;1050:9;1041:7;1037:23;1033:33;1030:53;;;1079:1;1076;1069:12;1030:53;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;-1:-1:-1;1265:2:108;1250:18;;1237:32;;-1:-1:-1;1347:2:108;1332:18;;1319:32;1360:33;1319:32;1360:33;:::i;:::-;1412:7;-1:-1:-1;1470:2:108;1455:18;;1442:32;1497:18;1486:30;;1483:50;;;1529:1;1526;1519:12;1483:50;1552:73;1617:7;1608:6;1597:9;1593:22;1552:73;:::i;:::-;1542:83;;;868:763;;;;;;;:::o;1636:184::-;1688:77;1685:1;1678:88;1785:4;1782:1;1775:15;1809:4;1806:1;1799:15;1825:843;1867:5;1920:3;1913:4;1905:6;1901:17;1897:27;1887:55;;1938:1;1935;1928:12;1887:55;1978:6;1965:20;2008:18;2000:6;1997:30;1994:56;;;2030:18;;:::i;:::-;2079:2;2073:9;2226:66;2221:2;2152:66;2145:4;2137:6;2133:17;2129:90;2125:99;2121:172;2113:6;2109:185;2360:6;2348:10;2345:22;2324:18;2312:10;2309:34;2306:62;2303:88;;;2371:18;;:::i;:::-;2407:2;2400:22;2431;;;2472:19;;;2493:4;2468:30;2465:39;-1:-1:-1;2462:59:108;;;2517:1;2514;2507:12;2462:59;2581:6;2574:4;2566:6;2562:17;2555:4;2547:6;2543:17;2530:58;2636:1;2608:19;;;2629:4;2604:30;2597:41;;;;2612:6;1825:843;-1:-1:-1;;;1825:843:108:o;2673:347::-;2724:8;2734:6;2788:3;2781:4;2773:6;2769:17;2765:27;2755:55;;2806:1;2803;2796:12;2755:55;-1:-1:-1;2829:20:108;;2872:18;2861:30;;2858:50;;;2904:1;2901;2894:12;2858:50;2941:4;2933:6;2929:17;2917:29;;2993:3;2986:4;2977:6;2969;2965:19;2961:30;2958:39;2955:59;;;3010:1;3007;3000:12;2955:59;2673:347;;;;;:::o;3025:162::-;3091:5;3136:3;3127:6;3122:3;3118:16;3114:26;3111:46;;;3153:1;3150;3143:12;3192:1261;3347:6;3355;3363;3371;3379;3387;3395;3448:3;3436:9;3427:7;3423:23;3419:33;3416:53;;;3465:1;3462;3455:12;3416:53;3505:9;3492:23;3538:18;3530:6;3527:30;3524:50;;;3570:1;3567;3560:12;3524:50;3593:49;3634:7;3625:6;3614:9;3610:22;3593:49;:::i;:::-;3583:59;-1:-1:-1;;3711:2:108;3696:18;;3683:32;;-1:-1:-1;3791:2:108;3776:18;;3763:32;3804:33;3763:32;3804:33;:::i;:::-;3856:7;-1:-1:-1;3916:2:108;3901:18;;3888:32;3945:18;3932:32;;3929:52;;;3977:1;3974;3967:12;3929:52;4016:60;4068:7;4057:8;4046:9;4042:24;4016:60;:::i;:::-;4095:8;;-1:-1:-1;3990:86:108;-1:-1:-1;;4203:3:108;4188:19;;4175:33;;-1:-1:-1;4287:3:108;4272:19;;4259:33;4317:18;4304:32;;4301:52;;;4349:1;4346;4339:12;4301:52;4372:75;4439:7;4428:8;4417:9;4413:24;4372:75;:::i;:::-;4362:85;;;3192:1261;;;;;;;;;;:::o;4458:1140::-;4604:6;4612;4620;4628;4636;4644;4697:3;4685:9;4676:7;4672:23;4668:33;4665:53;;;4714:1;4711;4704:12;4665:53;4754:9;4741:23;4787:18;4779:6;4776:30;4773:50;;;4819:1;4816;4809:12;4773:50;4842:49;4883:7;4874:6;4863:9;4859:22;4842:49;:::i;:::-;4832:59;;;4941:2;4930:9;4926:18;4913:32;4954:31;4979:5;4954:31;:::i;:::-;5004:5;-1:-1:-1;5062:2:108;5047:18;;5034:32;5091:18;5078:32;;5075:52;;;5123:1;5120;5113:12;5075:52;5162:60;5214:7;5203:8;5192:9;5188:24;5162:60;:::i;:::-;5241:8;;-1:-1:-1;5136:86:108;-1:-1:-1;;5349:2:108;5334:18;;5321:32;;-1:-1:-1;5432:3:108;5417:19;;5404:33;5462:18;5449:32;;5446:52;;;5494:1;5491;5484:12;5446:52;5517:75;5584:7;5573:8;5562:9;5558:24;5517:75;:::i;:::-;5507:85;;;4458:1140;;;;;;;;:::o;5603:922::-;5728:6;5736;5744;5752;5760;5813:3;5801:9;5792:7;5788:23;5784:33;5781:53;;;5830:1;5827;5820:12;5781:53;5870:9;5857:23;5903:18;5895:6;5892:30;5889:50;;;5935:1;5932;5925:12;5889:50;5958:73;6023:7;6014:6;6003:9;5999:22;5958:73;:::i;:::-;5948:83;-1:-1:-1;;6100:2:108;6085:18;;6072:32;;-1:-1:-1;6180:2:108;6165:18;;6152:32;6193:33;6152:32;6193:33;:::i;:::-;6245:7;-1:-1:-1;6305:2:108;6290:18;;6277:32;6334:18;6321:32;;6318:52;;;6366:1;6363;6356:12;6318:52;6405:60;6457:7;6446:8;6435:9;6431:24;6405:60;:::i;:::-;5603:922;;;;-1:-1:-1;5603:922:108;;-1:-1:-1;6484:8:108;;6379:86;5603:922;-1:-1:-1;;;5603:922:108:o;6761:226::-;6820:6;6873:2;6861:9;6852:7;6848:23;6844:32;6841:52;;;6889:1;6886;6879:12;6841:52;-1:-1:-1;6934:23:108;;6761:226;-1:-1:-1;6761:226:108:o;7174:367::-;7242:6;7250;7303:2;7291:9;7282:7;7278:23;7274:32;7271:52;;;7319:1;7316;7309:12;7271:52;7364:23;;;-1:-1:-1;7463:2:108;7448:18;;7435:32;7476:33;7435:32;7476:33;:::i;:::-;7528:7;7518:17;;;7174:367;;;;;:::o;7546:1119::-;7692:6;7700;7708;7716;7724;7732;7785:3;7773:9;7764:7;7760:23;7756:33;7753:53;;;7802:1;7799;7792:12;7753:53;7842:9;7829:23;7875:18;7867:6;7864:30;7861:50;;;7907:1;7904;7897:12;7861:50;7930:49;7971:7;7962:6;7951:9;7947:22;7930:49;:::i;:::-;7920:59;-1:-1:-1;;8048:2:108;8033:18;;8020:32;;-1:-1:-1;8149:2:108;8134:18;;8121:32;;-1:-1:-1;8232:2:108;8217:18;;8204:32;8261:18;8248:32;;8245:52;;;8293:1;8290;8283:12;8245:52;8332:60;8384:7;8373:8;8362:9;8358:24;8332:60;:::i;:::-;8411:8;;-1:-1:-1;8306:86:108;-1:-1:-1;;8499:3:108;8484:19;;8471:33;8529:18;8516:32;;8513:52;;;8561:1;8558;8551:12;8670:388;8738:6;8746;8799:2;8787:9;8778:7;8774:23;8770:32;8767:52;;;8815:1;8812;8805:12;8767:52;8854:9;8841:23;8873:31;8898:5;8873:31;:::i;:::-;8923:5;-1:-1:-1;8980:2:108;8965:18;;8952:32;8993:33;8952:32;8993:33;:::i;9063:455::-;9140:6;9148;9201:2;9189:9;9180:7;9176:23;9172:32;9169:52;;;9217:1;9214;9207:12;9169:52;9256:9;9243:23;9275:31;9300:5;9275:31;:::i;:::-;9325:5;-1:-1:-1;9381:2:108;9366:18;;9353:32;9408:18;9397:30;;9394:50;;;9440:1;9437;9430:12;9394:50;9463:49;9504:7;9495:6;9484:9;9480:22;9463:49;:::i;:::-;9453:59;;;9063:455;;;;;:::o;9523:501::-;9622:6;9630;9683:2;9671:9;9662:7;9658:23;9654:32;9651:52;;;9699:1;9696;9689:12;9651:52;9738:9;9725:23;9757:31;9782:5;9757:31;:::i;:::-;9807:5;-1:-1:-1;9863:2:108;9848:18;;9835:32;9890:18;9879:30;;9876:50;;;9922:1;9919;9912:12;9876:50;9945:73;10010:7;10001:6;9990:9;9986:22;9945:73;:::i;10029:836::-;10155:6;10163;10171;10179;10232:3;10220:9;10211:7;10207:23;10203:33;10200:53;;;10249:1;10246;10239:12;10200:53;10289:9;10276:23;10322:18;10314:6;10311:30;10308:50;;;10354:1;10351;10344:12;10308:50;10377:49;10418:7;10409:6;10398:9;10394:22;10377:49;:::i;:::-;10367:59;-1:-1:-1;;10495:2:108;10480:18;;10467:32;;-1:-1:-1;10575:2:108;10560:18;;10547:32;10588:33;10547:32;10588:33;:::i;:::-;10640:7;-1:-1:-1;10700:2:108;10685:18;;10672:32;10729:18;10716:32;;10713:52;;;10761:1;10758;10751:12;10713:52;10784:75;10851:7;10840:8;10829:9;10825:24;10784:75;:::i;10870:815::-;10996:6;11004;11012;11020;11073:3;11061:9;11052:7;11048:23;11044:33;11041:53;;;11090:1;11087;11080:12;11041:53;11130:9;11117:23;11163:18;11155:6;11152:30;11149:50;;;11195:1;11192;11185:12;11149:50;11218:49;11259:7;11250:6;11239:9;11235:22;11218:49;:::i;:::-;11208:59;-1:-1:-1;;11336:2:108;11321:18;;11308:32;;-1:-1:-1;11437:2:108;11422:18;;11409:32;;-1:-1:-1;11520:2:108;11505:18;;11492:32;11549:18;11536:32;;11533:52;;;11581:1;11578;11571:12;11690:250;11775:1;11785:113;11799:6;11796:1;11793:13;11785:113;;;11875:11;;;11869:18;11856:11;;;11849:39;11821:2;11814:10;11785:113;;;-1:-1:-1;;11932:1:108;11914:16;;11907:27;11690:250::o;11945:330::-;11987:3;12025:5;12019:12;12052:6;12047:3;12040:19;12068:76;12137:6;12130:4;12125:3;12121:14;12114:4;12107:5;12103:16;12068:76;:::i;:::-;12189:2;12177:15;12194:66;12173:88;12164:98;;;;12264:4;12160:109;;11945:330;-1:-1:-1;;11945:330:108:o;12280:220::-;12429:2;12418:9;12411:21;12392:4;12449:45;12490:2;12479:9;12475:18;12467:6;12449:45;:::i;12505:1064::-;12639:6;12647;12655;12663;12671;12679;12732:3;12720:9;12711:7;12707:23;12703:33;12700:53;;;12749:1;12746;12739:12;12700:53;12789:9;12776:23;12822:18;12814:6;12811:30;12808:50;;;12854:1;12851;12844:12;12808:50;12877:73;12942:7;12933:6;12922:9;12918:22;12877:73;:::i;:::-;12867:83;;;13000:2;12989:9;12985:18;12972:32;13013:31;13038:5;13013:31;:::i;:::-;13063:5;-1:-1:-1;13141:2:108;13126:18;;13113:32;;-1:-1:-1;13223:2:108;13208:18;;13195:32;13236:33;13195:32;13236:33;:::i;:::-;13288:7;-1:-1:-1;13348:3:108;13333:19;;13320:33;13378:18;13365:32;;13362:52;;;13410:1;13407;13400:12;13362:52;13449:60;13501:7;13490:8;13479:9;13475:24;13449:60;:::i;:::-;12505:1064;;;;-1:-1:-1;12505:1064:108;;-1:-1:-1;12505:1064:108;;13528:8;;12505:1064;-1:-1:-1;;;12505:1064:108:o;13574:508::-;13651:6;13659;13667;13720:2;13708:9;13699:7;13695:23;13691:32;13688:52;;;13736:1;13733;13726:12;13688:52;13775:9;13762:23;13794:31;13819:5;13794:31;:::i;:::-;13844:5;-1:-1:-1;13922:2:108;13907:18;;13894:32;;-1:-1:-1;14004:2:108;13989:18;;13976:32;14017:33;13976:32;14017:33;:::i;:::-;14069:7;14059:17;;;13574:508;;;;;:::o;14389:118::-;14475:5;14468:13;14461:21;14454:5;14451:32;14441:60;;14497:1;14494;14487:12;14512:245;14579:6;14632:2;14620:9;14611:7;14607:23;14603:32;14600:52;;;14648:1;14645;14638:12;14600:52;14680:9;14674:16;14699:28;14721:5;14699:28;:::i;14762:559::-;14820:5;14827:6;14887:3;14874:17;14969:66;14958:8;14942:14;14938:29;14934:102;14914:18;14910:127;14900:155;;15051:1;15048;15041:12;14900:155;15079:33;;15183:4;15170:18;;;-1:-1:-1;15131:21:108;;-1:-1:-1;15211:18:108;15200:30;;15197:50;;;15243:1;15240;15233:12;15197:50;15290:6;15274:14;15270:27;15263:5;15259:39;15256:59;;;15311:1;15308;15301:12;15326:325;15414:6;15409:3;15402:19;15466:6;15459:5;15452:4;15447:3;15443:14;15430:43;;15518:1;15511:4;15502:6;15497:3;15493:16;15489:27;15482:38;15384:3;15640:4;15570:66;15565:2;15557:6;15553:15;15549:88;15544:3;15540:98;15536:109;15529:116;;15326:325;;;;:::o;15656:798::-;15845:2;15834:9;15827:21;15808:4;15883:6;15870:20;15899:31;15924:5;15899:31;:::i;:::-;-1:-1:-1;;;;;15970:5:108;15966:54;15961:2;15950:9;15946:18;15939:82;;16070:2;16062:6;16058:15;16045:29;16106:18;16097:7;16093:32;16156:2;16147:7;16144:15;16134:43;;16173:1;16170;16163:12;16134:43;16213:2;16208;16197:9;16193:18;16186:30;;;16259:55;16310:2;16302:6;16298:15;16290:6;16259:55;:::i;:::-;16352:4;16345;16334:9;16330:20;16323:34;16374:74;16443:3;16432:9;16428:19;16414:12;16400;16374:74;:::i;16459:230::-;16529:6;16582:2;16570:9;16561:7;16557:23;16553:32;16550:52;;;16598:1;16595;16588:12;16550:52;-1:-1:-1;16643:16:108;;16459:230;-1:-1:-1;16459:230:108:o;16694:937::-;16759:3;16805:5;16792:19;16820:33;16845:7;16820:33;:::i;:::-;-1:-1:-1;;;;;16874:56:108;16862:69;;16979:4;16968:16;;16955:30;16994;16955;16994;:::i;:::-;17063:15;17056:23;17049:4;17040:14;;17033:47;17128:4;17117:16;;17104:30;17143:33;17104:30;17143:33;:::i;:::-;-1:-1:-1;;;;;17208:56:108;17201:4;17192:14;;17185:80;17308:55;17357:4;17346:16;;17350:5;17308:55;:::i;:::-;17395:4;17388;17383:3;17379:14;17372:28;17421:69;17484:4;17479:3;17475:14;17461:12;17447;17421:69;:::i;:::-;17559:4;17548:16;;;17535:30;17581:14;;;;17574:31;;;;-1:-1:-1;17409:81:108;;16694:937;-1:-1:-1;;16694:937:108:o;17636:1041::-;18067:3;18056:9;18049:22;18030:4;18094:46;18135:3;18124:9;18120:19;18112:6;18094:46;:::i;:::-;-1:-1:-1;;;;;18180:6:108;18176:55;18171:2;18160:9;18156:18;18149:83;18268:6;18263:2;18252:9;18248:18;18241:34;18311:6;18306:2;18295:9;18291:18;18284:34;18355:6;18349:3;18338:9;18334:19;18327:35;18411:9;18403:6;18399:22;18393:3;18382:9;18378:19;18371:51;18445:49;18487:6;18479;18471;18445:49;:::i;:::-;18431:63;;18531:6;18525:3;18514:9;18510:19;18503:35;18587:9;18579:6;18575:22;18569:3;18558:9;18554:19;18547:51;18615:56;18664:6;18656;18615:56;:::i;:::-;18607:64;17636:1041;-1:-1:-1;;;;;;;;;;;;17636:1041:108:o;18864:364::-;18943:6;18951;19004:2;18992:9;18983:7;18979:23;18975:32;18972:52;;;19020:1;19017;19010:12;18972:52;19052:9;19046:16;19071:31;19096:5;19071:31;:::i;:::-;19192:2;19177:18;;;;19171:25;19121:5;;19171:25;;-1:-1:-1;;;18864:364:108:o;19655:704::-;19974:3;19963:9;19956:22;19937:4;20001:46;20042:3;20031:9;20027:19;20019:6;20001:46;:::i;:::-;20095:9;20087:6;20083:22;20078:2;20067:9;20063:18;20056:50;20129:49;20171:6;20163;20155;20129:49;:::i;:::-;20115:63;;20214:6;20209:2;20198:9;20194:18;20187:34;20269:9;20261:6;20257:22;20252:2;20241:9;20237:18;20230:50;20297:56;20346:6;20338;20297:56;:::i;:::-;20289:64;19655:704;-1:-1:-1;;;;;;;;19655:704:108:o;20364:1105::-;20659:3;20648:9;20641:22;20622:4;20706:46;20745:6;20737;20706:46;:::i;:::-;20789:4;20783:3;20772:9;20768:19;20761:33;20817:74;20886:3;20875:9;20871:19;20857:12;20843;20817:74;:::i;:::-;20803:88;;;20938:4;20930:6;20926:17;20913:31;20953;20978:5;20953:31;:::i;:::-;-1:-1:-1;;;;;21021:54:108;;;21015:3;21000:19;;20993:83;21146:4;21134:17;;;21121:31;21183:3;21168:19;;21161:36;21235:55;;;21228:4;21213:20;;21206:85;21307:20;;21300:36;;;21374:22;;;-1:-1:-1;21352:20:108;;21345:52;21414:49;21378:6;21448;21440;21414:49;:::i;22758:1058::-;23233:3;23222:9;23215:22;23196:4;23260:46;23301:3;23290:9;23286:19;23278:6;23260:46;:::i;:::-;-1:-1:-1;;;;;23346:6:108;23342:55;23337:2;23326:9;23322:18;23315:83;23434:6;23429:2;23418:9;23414:18;23407:34;23477:6;23472:2;23461:9;23457:18;23450:34;23521:6;23515:3;23504:9;23500:19;23493:35;23559:9;23551:6;23547:22;23606:2;23600:3;23589:9;23585:19;23578:31;23633:1;23625:6;23618:17;23672:6;23666:3;23655:9;23651:19;23644:35;23724:2;23720;23716:11;23710:3;23699:9;23695:19;23688:40;;23745:65;23806:2;23798:6;23794:15;23786:6;23745:65;:::i;:::-;23737:73;22758:1058;-1:-1:-1;;;;;;;;;;22758:1058:108:o;25609:287::-;25738:3;25776:6;25770:13;25792:66;25851:6;25846:3;25839:4;25831:6;25827:17;25792:66;:::i;:::-;25874:16;;;;;25609:287;-1:-1:-1;;25609:287:108:o","linkReferences":{},"immutableReferences":{"44509":[{"start":9711,"length":32},{"start":9752,"length":32},{"start":10222,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","FUNGIBLE_MODULE_ADDRESS()":"3ce4a5bc","PAUSER_ROLE()":"e63ab1e9","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":"1cb5ea75","deposit(address,uint256,address)":"f45346dc","depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":"c39aca37","depositAndCall((bytes,address,uint256),uint256,address,bytes)":"21501a95","depositAndRevert(address,uint256,address,(address,uint64,bytes))":"0310eb76","execute((bytes,address,uint256),address,uint256,address,bytes)":"bcf7f32b","executeRevert(address,(address,uint64,bytes))":"717d335f","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","pause()":"8456cb59","paused()":"5c975abb","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","unpause()":"3f4ba83a","upgradeToAndCall(address,bytes)":"4f1ef286","withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":"7c0dcb5f","withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":"97a1cef1","withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":"048ae42c","withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":"3b283933","zetaToken()":"21e093b1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyMessage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZetaAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWZETAOrFungible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Called\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"depositAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"struct zContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"amount\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"}],\"internalType\":\"struct RevertContext\",\"name\":\"revertContext\",\"type\":\"tuple\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zetaToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"revertAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"callOnRevert\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"abortAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"revertMessage\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"onRevertGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct RevertOptions\",\"name\":\"revertOptions\",\"type\":\"tuple\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The contract doesn't hold any funds and should never have active allowances.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Called(address,address,bytes,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata passed to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address of the sender.\",\"zrc20\":\"Address of zrc20 to pay fees.\"}},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"chainId\":\"Chain id of external chain.\",\"gasLimit\":\"Gas limit.\",\"gasfee\":\"The gas fee for the withdrawal.\",\"message\":\"The calldata passed to the contract call.\",\"protocolFlatFee\":\"The protocol flat fee for the withdrawal.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"sender\":\"The address from which the tokens are withdrawn.\",\"value\":\"The amount of tokens withdrawn.\",\"zrc20\":\"The address of the ZRC20 token.\"}}},\"kind\":\"dev\",\"methods\":{\"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"Address of zrc20 to pay fees.\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"deposit(address,uint256,address)\":{\"params\":{\"amount\":\"The amount of tokens to deposit.\",\"target\":\"The target address to receive the deposited tokens.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"depositAndCall((bytes,address,uint256),uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\"}},\"depositAndRevert(address,uint256,address,(address,uint64,bytes))\":{\"params\":{\"amount\":\"The amount of tokens to revert.\",\"revertContext\":\"Revert context to pass to onRevert.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"execute((bytes,address,uint256),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"The amount of tokens to transfer.\",\"context\":\"The context of the cross-chain call.\",\"message\":\"The calldata to pass to the contract call.\",\"target\":\"The target contract to call.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"executeRevert(address,(address,uint64,bytes))\":{\"params\":{\"revertContext\":\"Revert context to pass to onRevert.\",\"target\":\"The target contract to call.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Using admin to authorize upgrades and pause.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\"}},\"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"gasLimit\":\"Gas limit.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\",\"zrc20\":\"The address of the ZRC20 token.\"}},\"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))\":{\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"chainId\":\"Chain id of the external chain.\",\"message\":\"The calldata to pass to the contract call.\",\"receiver\":\"The receiver address on the external chain.\",\"revertOptions\":\"Revert options.\"}}},\"title\":\"GatewayZEVM\",\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotFungibleModule()\":[{\"notice\":\"Error indicating that the caller is not the Fungible module.\"}],\"EmptyMessage()\":[{\"notice\":\"Error indicating call method received empty message as argument.\"}],\"FailedZetaSent()\":[{\"notice\":\"Error indicating a failure to send ZETA tokens.\"}],\"GasFeeTransferFailed()\":[{\"notice\":\"Error indicating a failure to transfer gas fee.\"}],\"InsufficientZRC20Amount()\":[{\"notice\":\"Error indicating an insufficient ZRC20 token amount.\"}],\"InsufficientZetaAmount()\":[{\"notice\":\"Error indicating an insufficient zeta amount.\"}],\"InvalidTarget()\":[{\"notice\":\"Error indicating an invalid target address.\"}],\"OnlyWZETAOrFungible()\":[{\"notice\":\"Error indicating that only WZETA or the Fungible module can call the function.\"}],\"WithdrawalFailed()\":[{\"notice\":\"Error indicating a withdrawal failure.\"}],\"ZRC20BurnFailed()\":[{\"notice\":\"Error indicating a failure to burn ZRC20 tokens.\"}],\"ZRC20DepositFailed()\":[{\"notice\":\"Error indicating a failure to deposit ZRC20 tokens.\"}],\"ZRC20TransferFailed()\":[{\"notice\":\"Error indicating a failure to transfer ZRC20 tokens.\"}],\"ZeroAddress()\":[{\"notice\":\"Error indicating a zero address was provided.\"}]},\"events\":{\"Called(address,address,bytes,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a cross-chain call is made.\"},\"Withdrawn(address,uint256,bytes,address,uint256,uint256,uint256,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Emitted when a withdrawal is made.\"}},\"kind\":\"user\",\"methods\":{\"FUNGIBLE_MODULE_ADDRESS()\":{\"notice\":\"The constant address of the Fungible module.\"},\"PAUSER_ROLE()\":{\"notice\":\"New role identifier for pauser role.\"},\"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Call a smart contract on an external chain without asset transfer.\"},\"deposit(address,uint256,address)\":{\"notice\":\"Deposit foreign coins into ZRC20.\"},\"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)\":{\"notice\":\"Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM.\"},\"depositAndCall((bytes,address,uint256),uint256,address,bytes)\":{\"notice\":\"Deposit ZETA and call a user-specified contract on ZEVM.\"},\"depositAndRevert(address,uint256,address,(address,uint64,bytes))\":{\"notice\":\"Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM.\"},\"execute((bytes,address,uint256),address,uint256,address,bytes)\":{\"notice\":\"Execute a user-specified contract on ZEVM.\"},\"executeRevert(address,(address,uint64,bytes))\":{\"notice\":\"Revert a user-specified contract on ZEVM.\"},\"initialize(address,address)\":{\"notice\":\"Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\"},\"pause()\":{\"notice\":\"Pause contract.\"},\"unpause()\":{\"notice\":\"Unpause contract.\"},\"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZRC20 tokens to an external chain.\"},\"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZETA tokens to an external chain.\"},\"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZRC20 tokens and call a smart contract on an external chain.\"},\"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))\":{\"notice\":\"Withdraw ZETA tokens and call a smart contract on an external chain.\"},\"zetaToken()\":{\"notice\":\"The address of the Zeta token.\"}},\"notice\":\"The GatewayZEVM contract is the endpoint to call smart contracts on omnichain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/GatewayZEVM.sol\":\"GatewayZEVM\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/Revert.sol\":{\"keccak256\":\"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409\",\"dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY\"]},\"contracts/zevm/GatewayZEVM.sol\":{\"keccak256\":\"0x772edf5c1c68d0ab0d338632eeb0e9f080943f4c3a06c6f5b49469ac3842d283\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a8f808566eb3d9fe6b5c3161e7a8b2157068667e5f81d1cf37167842b402436\",\"dweb:/ipfs/QmbqTG4TsbP9TCnjVPigAmm3bXgWvcGU5KrADHs3wdaGAB\"]},\"contracts/zevm/interfaces/IGatewayZEVM.sol\":{\"keccak256\":\"0xe9520cce7fbfe8abcc4922654cf82bde005f5836ba77209dd25e5b1650e676b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c1b38d6154acd0b167a5c7858f6b46178480b649511ed8103ab1fba7fda420ec\",\"dweb:/ipfs/QmeDBj5gYBAnsKsCwiNqV41wn88ksU9J2CFs3M79VUh2jS\"]},\"contracts/zevm/interfaces/IWZETA.sol\":{\"keccak256\":\"0x9c90341536af75438f7fa7aed65d0f5f56f87d5deee7fb6f4a07f4f23eb2a106\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e3110b8de3e8cdcf871090659af3c31efb67048afabd689be3bb3295c172f680\",\"dweb:/ipfs/QmWxpzAxLguM8MtnD2kBo687KXaFBjJ5v2Qeshmmye4XoH\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]},\"contracts/zevm/interfaces/UniversalContract.sol\":{\"keccak256\":\"0x6523466b88f1bb8c5b59ba9b8915af533ccdd6c0eef91e4a9243ee0acc96b4b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9314040c4cae46ecdfa0d68f7e7c2cde4eb809b95bd6629ae731fc67f2d5285\",\"dweb:/ipfs/QmUCXokEgigBPwEGP93Q7XL2Evi3gYGr2P8UrdDKPPQhSS\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007\",\"dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45\",\"dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EmptyMessage"},{"inputs":[],"type":"error","name":"EnforcedPause"},{"inputs":[],"type":"error","name":"ExpectedPause"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"FailedZetaSent"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InsufficientZRC20Amount"},{"inputs":[],"type":"error","name":"InsufficientZetaAmount"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"InvalidTarget"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"OnlyWZETAOrFungible"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"WithdrawalFailed"},{"inputs":[],"type":"error","name":"ZRC20BurnFailed"},{"inputs":[],"type":"error","name":"ZRC20DepositFailed"},{"inputs":[],"type":"error","name":"ZRC20TransferFailed"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"address","name":"zrc20","type":"address","indexed":true},{"internalType":"bytes","name":"receiver","type":"bytes","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Called","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"chainId","type":"uint256","indexed":true},{"internalType":"bytes","name":"receiver","type":"bytes","indexed":false},{"internalType":"address","name":"zrc20","type":"address","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasfee","type":"uint256","indexed":false},{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false},{"internalType":"bytes","name":"message","type":"bytes","indexed":false},{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}],"indexed":false}],"type":"event","name":"Withdrawn","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FUNGIBLE_MODULE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"call"},{"inputs":[{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"deposit"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"depositAndCall"},{"inputs":[{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"depositAndRevert"},{"inputs":[{"internalType":"struct zContext","name":"context","type":"tuple","components":[{"internalType":"bytes","name":"origin","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"}]},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"execute"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct RevertContext","name":"revertContext","type":"tuple","components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"revertMessage","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"executeRevert"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"zetaToken_","type":"address"},{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdraw"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"zrc20","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdrawAndCall"},{"inputs":[{"internalType":"bytes","name":"receiver","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"struct RevertOptions","name":"revertOptions","type":"tuple","components":[{"internalType":"address","name":"revertAddress","type":"address"},{"internalType":"bool","name":"callOnRevert","type":"bool"},{"internalType":"address","name":"abortAddress","type":"address"},{"internalType":"bytes","name":"revertMessage","type":"bytes"},{"internalType":"uint256","name":"onRevertGasLimit","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"withdrawAndCall"},{"inputs":[],"stateMutability":"view","type":"function","name":"zetaToken","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"params":{"gasLimit":"Gas limit.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"Address of zrc20 to pay fees."}},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"deposit(address,uint256,address)":{"params":{"amount":"The amount of tokens to deposit.","target":"The target address to receive the deposited tokens.","zrc20":"The address of the ZRC20 token."}},"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"depositAndCall((bytes,address,uint256),uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call."}},"depositAndRevert(address,uint256,address,(address,uint64,bytes))":{"params":{"amount":"The amount of tokens to revert.","revertContext":"Revert context to pass to onRevert.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"execute((bytes,address,uint256),address,uint256,address,bytes)":{"params":{"amount":"The amount of tokens to transfer.","context":"The context of the cross-chain call.","message":"The calldata to pass to the contract call.","target":"The target contract to call.","zrc20":"The address of the ZRC20 token."}},"executeRevert(address,(address,uint64,bytes))":{"params":{"revertContext":"Revert context to pass to onRevert.","target":"The target contract to call."}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Using admin to authorize upgrades and pause."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"The address of the ZRC20 token."}},"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options."}},"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","gasLimit":"Gas limit.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options.","zrc20":"The address of the ZRC20 token."}},"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":{"params":{"amount":"The amount of tokens to withdraw.","chainId":"Chain id of the external chain.","message":"The calldata to pass to the contract call.","receiver":"The receiver address on the external chain.","revertOptions":"Revert options."}}},"version":1},"userdoc":{"kind":"user","methods":{"FUNGIBLE_MODULE_ADDRESS()":{"notice":"The constant address of the Fungible module."},"PAUSER_ROLE()":{"notice":"New role identifier for pauser role."},"call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"notice":"Call a smart contract on an external chain without asset transfer."},"deposit(address,uint256,address)":{"notice":"Deposit foreign coins into ZRC20."},"depositAndCall((bytes,address,uint256),address,uint256,address,bytes)":{"notice":"Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM."},"depositAndCall((bytes,address,uint256),uint256,address,bytes)":{"notice":"Deposit ZETA and call a user-specified contract on ZEVM."},"depositAndRevert(address,uint256,address,(address,uint64,bytes))":{"notice":"Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM."},"execute((bytes,address,uint256),address,uint256,address,bytes)":{"notice":"Execute a user-specified contract on ZEVM."},"executeRevert(address,(address,uint64,bytes))":{"notice":"Revert a user-specified contract on ZEVM."},"initialize(address,address)":{"notice":"Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE."},"pause()":{"notice":"Pause contract."},"unpause()":{"notice":"Unpause contract."},"withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZRC20 tokens to an external chain."},"withdraw(bytes,uint256,uint256,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZETA tokens to an external chain."},"withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZRC20 tokens and call a smart contract on an external chain."},"withdrawAndCall(bytes,uint256,uint256,bytes,(address,bool,address,bytes,uint256))":{"notice":"Withdraw ZETA tokens and call a smart contract on an external chain."},"zetaToken()":{"notice":"The address of the Zeta token."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/GatewayZEVM.sol":"GatewayZEVM"},"evmVersion":"london","libraries":{}},"sources":{"contracts/Revert.sol":{"keccak256":"0x4cc63069ff784e32bc89995f30f9c229b4c3e6cf5c917665626c42f34105124b","urls":["bzz-raw://a963620b9cf83465f7a9fb7a9f4e70f6b6905a4e3bb7219dfd7a65ee55ab9409","dweb:/ipfs/QmUQGaQ4TEqhH9VXgdwbudebxgANpUQcuhbSp7ZfyRiDPY"],"license":"MIT"},"contracts/zevm/GatewayZEVM.sol":{"keccak256":"0x772edf5c1c68d0ab0d338632eeb0e9f080943f4c3a06c6f5b49469ac3842d283","urls":["bzz-raw://7a8f808566eb3d9fe6b5c3161e7a8b2157068667e5f81d1cf37167842b402436","dweb:/ipfs/QmbqTG4TsbP9TCnjVPigAmm3bXgWvcGU5KrADHs3wdaGAB"],"license":"MIT"},"contracts/zevm/interfaces/IGatewayZEVM.sol":{"keccak256":"0xe9520cce7fbfe8abcc4922654cf82bde005f5836ba77209dd25e5b1650e676b0","urls":["bzz-raw://c1b38d6154acd0b167a5c7858f6b46178480b649511ed8103ab1fba7fda420ec","dweb:/ipfs/QmeDBj5gYBAnsKsCwiNqV41wn88ksU9J2CFs3M79VUh2jS"],"license":"MIT"},"contracts/zevm/interfaces/IWZETA.sol":{"keccak256":"0x9c90341536af75438f7fa7aed65d0f5f56f87d5deee7fb6f4a07f4f23eb2a106","urls":["bzz-raw://e3110b8de3e8cdcf871090659af3c31efb67048afabd689be3bb3295c172f680","dweb:/ipfs/QmWxpzAxLguM8MtnD2kBo687KXaFBjJ5v2Qeshmmye4XoH"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"},"contracts/zevm/interfaces/UniversalContract.sol":{"keccak256":"0x6523466b88f1bb8c5b59ba9b8915af533ccdd6c0eef91e4a9243ee0acc96b4b4","urls":["bzz-raw://f9314040c4cae46ecdfa0d68f7e7c2cde4eb809b95bd6629ae731fc67f2d5285","dweb:/ipfs/QmUCXokEgigBPwEGP93Q7XL2Evi3gYGr2P8UrdDKPPQhSS"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol":{"keccak256":"0x92915b7f7f642c6be3f65bfd1522feb5d5b6ef25f755f4dbb51df32c868f2f97","urls":["bzz-raw://85ad36d5cc7e190e1ee6c94b24659bc3a31396c4c36b6ffa6a509e10661f8007","dweb:/ipfs/QmPFyc4zMh2zo6YWZt25gjm3YdR2hg6wGETaWw256fMmJJ"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol":{"keccak256":"0xb44e086e941292cdc7f440de51478493894ef0b1aeccb0c4047445919f667f74","urls":["bzz-raw://942dad22fbdc1669f025540ba63aa3ccfad5f8458fc5d4525b31ebf272e7af45","dweb:/ipfs/Qmdo4X2M82aM3AMoW2kf2jhYkSCyC4T1pHNd6obdsDFnAB"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":2515,"contract":"contracts/zevm/GatewayZEVM.sol:GatewayZEVM","label":"zetaToken","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"ast":{"absolutePath":"contracts/zevm/GatewayZEVM.sol","id":3463,"exportedSymbols":{"AccessControlUpgradeable":[44235],"ContextUpgradeable":[44717],"ERC165Upgradeable":[45062],"ERC1967Utils":[46098],"GatewayZEVM":[3462],"IAccessControl":[45441],"IERC1822Proxiable":[45620],"IGatewayZEVM":[4578],"IWETH9":[4708],"IZRC20":[4825],"Initializable":[44489],"PausableUpgradeable":[44893],"ReentrancyGuardUpgradeable":[45022],"RevertContext":[21],"RevertOptions":[13],"UUPSUpgradeable":[44671],"UniversalContract":[4947],"zContext":[4914]},"nodeType":"SourceUnit","src":"32:14420:10","nodes":[{"id":2476,"nodeType":"PragmaDirective","src":"32:23:10","nodes":[],"literals":["solidity","0.8",".26"]},{"id":2478,"nodeType":"ImportDirective","src":"57:61:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IGatewayZEVM.sol","file":"./interfaces/IGatewayZEVM.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4579,"symbolAliases":[{"foreign":{"id":2477,"name":"IGatewayZEVM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4578,"src":"66:12:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2481,"nodeType":"ImportDirective","src":"120:74:10","nodes":[],"absolutePath":"contracts/Revert.sol","file":"../../contracts/Revert.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":31,"symbolAliases":[{"foreign":{"id":2479,"name":"RevertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21,"src":"129:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2480,"name":"RevertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"144:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2482,"nodeType":"ImportDirective","src":"195:33:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IWZETA.sol","file":"./interfaces/IWZETA.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4709,"symbolAliases":[],"unitAlias":""},{"id":2484,"nodeType":"ImportDirective","src":"229:49:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"./interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4904,"symbolAliases":[{"foreign":{"id":2483,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"238:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2487,"nodeType":"ImportDirective","src":"279:81:10","nodes":[],"absolutePath":"contracts/zevm/interfaces/UniversalContract.sol","file":"./interfaces/UniversalContract.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":4948,"symbolAliases":[{"foreign":{"id":2485,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"288:17:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2486,"name":"zContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4914,"src":"307:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":2488,"nodeType":"ImportDirective","src":"361:81:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44236,"symbolAliases":[],"unitAlias":""},{"id":2489,"nodeType":"ImportDirective","src":"443:75:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44490,"symbolAliases":[],"unitAlias":""},{"id":2490,"nodeType":"ImportDirective","src":"519:77:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44672,"symbolAliases":[],"unitAlias":""},{"id":2491,"nodeType":"ImportDirective","src":"598:75:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":44894,"symbolAliases":[],"unitAlias":""},{"id":2492,"nodeType":"ImportDirective","src":"674:82:10","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol","nameLocation":"-1:-1:-1","scope":3463,"sourceUnit":45023,"symbolAliases":[],"unitAlias":""},{"id":3462,"nodeType":"ContractDefinition","src":"958:13493:10","nodes":[{"id":2508,"nodeType":"ErrorDefinition","src":"1194:20:10","nodes":[],"documentation":{"id":2506,"nodeType":"StructuredDocumentation","src":"1132:57:10","text":"@notice Error indicating a zero address was provided."},"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"1200:11:10","parameters":{"id":2507,"nodeType":"ParameterList","parameters":[],"src":"1211:2:10"}},{"id":2512,"nodeType":"VariableDeclaration","src":"1281:92:10","nodes":[],"constant":true,"documentation":{"id":2509,"nodeType":"StructuredDocumentation","src":"1220:56:10","text":"@notice The constant address of the Fungible module."},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"1305:23:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2510,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":2511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1331:42:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":2515,"nodeType":"VariableDeclaration","src":"1426:24:10","nodes":[],"constant":false,"documentation":{"id":2513,"nodeType":"StructuredDocumentation","src":"1379:42:10","text":"@notice The address of the Zeta token."},"functionSelector":"21e093b1","mutability":"mutable","name":"zetaToken","nameLocation":"1441:9:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2514,"name":"address","nodeType":"ElementaryTypeName","src":"1426:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":2521,"nodeType":"VariableDeclaration","src":"1510:62:10","nodes":[],"constant":true,"documentation":{"id":2516,"nodeType":"StructuredDocumentation","src":"1457:48:10","text":"@notice New role identifier for pauser role."},"functionSelector":"e63ab1e9","mutability":"constant","name":"PAUSER_ROLE","nameLocation":"1534:11:10","scope":3462,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1510:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5041555345525f524f4c45","id":2519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1558:13:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""},"value":"PAUSER_ROLE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a","typeString":"literal_string \"PAUSER_ROLE\""}],"id":2518,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1548:9:10","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":2535,"nodeType":"ModifierDefinition","src":"1639:153:10","nodes":[],"body":{"id":2534,"nodeType":"Block","src":"1663:129:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2524,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1677:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1681:6:10","memberName":"sender","nodeType":"MemberAccess","src":"1677:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2526,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"1691:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1677:37:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2532,"nodeType":"IfStatement","src":"1673:102:10","trueBody":{"id":2531,"nodeType":"Block","src":"1716:59:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2528,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4411,"src":"1737:25:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1737:27:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2530,"nodeType":"RevertStatement","src":"1730:34:10"}]}},{"id":2533,"nodeType":"PlaceholderStatement","src":"1784:1:10"}]},"documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"1579:55:10","text":"@dev Only Fungible module address allowed modifier."},"name":"onlyFungible","nameLocation":"1648:12:10","parameters":{"id":2523,"nodeType":"ParameterList","parameters":[],"src":"1660:2:10"},"virtual":false,"visibility":"internal"},{"id":2543,"nodeType":"FunctionDefinition","src":"1851:53:10","nodes":[],"body":{"id":2542,"nodeType":"Block","src":"1865:39:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2539,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44457,"src":"1875:20:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1875:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2541,"nodeType":"ExpressionStatement","src":"1875:22:10"}]},"documentation":{"id":2536,"nodeType":"StructuredDocumentation","src":"1798:48:10","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2537,"nodeType":"ParameterList","parameters":[],"src":"1862:2:10"},"returnParameters":{"id":2538,"nodeType":"ParameterList","parameters":[],"src":"1865:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2598,"nodeType":"FunctionDefinition","src":"2067:439:10","nodes":[],"body":{"id":2597,"nodeType":"Block","src":"2142:364:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2553,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"2156:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2178:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2170:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2554,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:10","typeDescriptions":{}}},"id":2557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2170:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2156:24:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2559,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2184:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2202:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2194:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2560,"name":"address","nodeType":"ElementaryTypeName","src":"2194:7:10","typeDescriptions":{}}},"id":2563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2184:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2156:48:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2570,"nodeType":"IfStatement","src":"2152:99:10","trueBody":{"id":2569,"nodeType":"Block","src":"2206:45:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2566,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"2227:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2227:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2568,"nodeType":"RevertStatement","src":"2220:20:10"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2571,"name":"__UUPSUpgradeable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44543,"src":"2260:22:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2260:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2573,"nodeType":"ExpressionStatement","src":"2260:24:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2574,"name":"__AccessControl_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43936,"src":"2294:20:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2294:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2576,"nodeType":"ExpressionStatement","src":"2294:22:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2577,"name":"__Pausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44769,"src":"2326:15:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2579,"nodeType":"ExpressionStatement","src":"2326:17:10"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2580,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44933,"src":"2353:22:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2353:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2582,"nodeType":"ExpressionStatement","src":"2353:24:10"},{"expression":{"arguments":[{"id":2584,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2399:18:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2585,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2419:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2583,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2388:10:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2388:38:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2587,"nodeType":"ExpressionStatement","src":"2388:38:10"},{"expression":{"arguments":[{"id":2589,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"2447:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2590,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"2460:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2588,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44188,"src":"2436:10:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2436:31:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2592,"nodeType":"ExpressionStatement","src":"2436:31:10"},{"expression":{"id":2595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2593,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"2477:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2594,"name":"zetaToken_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"2489:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2477:22:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2596,"nodeType":"ExpressionStatement","src":"2477:22:10"}]},"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"1910:152:10","text":"@notice Initialize with address of zeta token and admin account set as DEFAULT_ADMIN_ROLE.\n @dev Using admin to authorize upgrades and pause."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":2551,"kind":"modifierInvocation","modifierName":{"id":2550,"name":"initializer","nameLocations":["2130:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":44343,"src":"2130:11:10"},"nodeType":"ModifierInvocation","src":"2130:11:10"}],"name":"initialize","nameLocation":"2076:10:10","parameters":{"id":2549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2546,"mutability":"mutable","name":"zetaToken_","nameLocation":"2095:10:10","nodeType":"VariableDeclaration","scope":2598,"src":"2087:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2545,"name":"address","nodeType":"ElementaryTypeName","src":"2087:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2548,"mutability":"mutable","name":"admin_","nameLocation":"2115:6:10","nodeType":"VariableDeclaration","scope":2598,"src":"2107:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2547,"name":"address","nodeType":"ElementaryTypeName","src":"2107:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2086:36:10"},"returnParameters":{"id":2552,"nodeType":"ParameterList","parameters":[],"src":"2142:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2609,"nodeType":"FunctionDefinition","src":"2637:104:10","nodes":[],"body":{"id":2608,"nodeType":"Block","src":"2738:3:10","nodes":[],"statements":[]},"baseFunctions":[44625],"documentation":{"id":2599,"nodeType":"StructuredDocumentation","src":"2512:120:10","text":"@dev Authorizes the upgrade of the contract.\n @param newImplementation The address of the new implementation."},"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2605,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43901,"src":"2718:18:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2606,"kind":"modifierInvocation","modifierName":{"id":2604,"name":"onlyRole","nameLocations":["2709:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"2709:8:10"},"nodeType":"ModifierInvocation","src":"2709:28:10"}],"name":"_authorizeUpgrade","nameLocation":"2646:17:10","overrides":{"id":2603,"nodeType":"OverrideSpecifier","overrides":[],"src":"2700:8:10"},"parameters":{"id":2602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2601,"mutability":"mutable","name":"newImplementation","nameLocation":"2672:17:10","nodeType":"VariableDeclaration","scope":2609,"src":"2664:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2600,"name":"address","nodeType":"ElementaryTypeName","src":"2664:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2663:27:10"},"returnParameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"2738:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2629,"nodeType":"FunctionDefinition","src":"2816:156:10","nodes":[],"body":{"id":2628,"nodeType":"Block","src":"2857:115:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2615,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2871:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2875:6:10","memberName":"sender","nodeType":"MemberAccess","src":"2871:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2617,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"2885:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2871:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2619,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2898:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2902:6:10","memberName":"sender","nodeType":"MemberAccess","src":"2898:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2621,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"2912:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2898:37:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2871:64:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2627,"nodeType":"IfStatement","src":"2867:98:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2624,"name":"OnlyWZETAOrFungible","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4420,"src":"2944:19:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:21:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2626,"nodeType":"RevertStatement","src":"2937:28:10"}}]},"documentation":{"id":2610,"nodeType":"StructuredDocumentation","src":"2747:64:10","text":"@dev Receive function to receive ZETA from WETH9.withdraw()."},"implemented":true,"kind":"receive","modifiers":[{"id":2613,"kind":"modifierInvocation","modifierName":{"id":2612,"name":"whenNotPaused","nameLocations":["2843:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"2843:13:10"},"nodeType":"ModifierInvocation","src":"2843:13:10"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2611,"nodeType":"ParameterList","parameters":[],"src":"2823:2:10"},"returnParameters":{"id":2614,"nodeType":"ParameterList","parameters":[],"src":"2857:0:10"},"scope":3462,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":2640,"nodeType":"FunctionDefinition","src":"3010:73:10","nodes":[],"body":{"id":2639,"nodeType":"Block","src":"3058:25:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2636,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44868,"src":"3068:6:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3068:8:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2638,"nodeType":"ExpressionStatement","src":"3068:8:10"}]},"documentation":{"id":2630,"nodeType":"StructuredDocumentation","src":"2978:27:10","text":"@notice Pause contract."},"functionSelector":"8456cb59","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2633,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"3045:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2634,"kind":"modifierInvocation","modifierName":{"id":2632,"name":"onlyRole","nameLocations":["3036:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3036:8:10"},"nodeType":"ModifierInvocation","src":"3036:21:10"}],"name":"pause","nameLocation":"3019:5:10","parameters":{"id":2631,"nodeType":"ParameterList","parameters":[],"src":"3024:2:10"},"returnParameters":{"id":2635,"nodeType":"ParameterList","parameters":[],"src":"3058:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2651,"nodeType":"FunctionDefinition","src":"3123:77:10","nodes":[],"body":{"id":2650,"nodeType":"Block","src":"3173:27:10","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2647,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"3183:8:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3183:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2649,"nodeType":"ExpressionStatement","src":"3183:10:10"}]},"documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"3089:29:10","text":"@notice Unpause contract."},"functionSelector":"3f4ba83a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":2644,"name":"PAUSER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"3160:11:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2645,"kind":"modifierInvocation","modifierName":{"id":2643,"name":"onlyRole","nameLocations":["3151:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":43930,"src":"3151:8:10"},"nodeType":"ModifierInvocation","src":"3151:21:10"}],"name":"unpause","nameLocation":"3132:7:10","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"3139:2:10"},"returnParameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"3173:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2672,"nodeType":"FunctionDefinition","src":"3420:210:10","nodes":[],"body":{"id":2671,"nodeType":"Block","src":"3502:128:10","nodes":[],"statements":[{"expression":{"arguments":[{"id":2662,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2654,"src":"3582:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2663,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"3590:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2665,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"3604:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2664,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"3597:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3611:9:10","memberName":"GAS_LIMIT","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"3597:23:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2661,"name":"_withdrawZRC20WithGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"3555:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,uint256) returns (uint256)"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3555:68:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2660,"id":2670,"nodeType":"Return","src":"3548:75:10"}]},"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"3206:209:10","text":"@dev Internal function to withdraw ZRC20 tokens.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @return The gas fee for the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawZRC20","nameLocation":"3429:14:10","parameters":{"id":2657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2654,"mutability":"mutable","name":"amount","nameLocation":"3452:6:10","nodeType":"VariableDeclaration","scope":2672,"src":"3444:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2653,"name":"uint256","nodeType":"ElementaryTypeName","src":"3444:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2656,"mutability":"mutable","name":"zrc20","nameLocation":"3468:5:10","nodeType":"VariableDeclaration","scope":2672,"src":"3460:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2655,"name":"address","nodeType":"ElementaryTypeName","src":"3460:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3443:31:10"},"returnParameters":{"id":2660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2672,"src":"3493:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2658,"name":"uint256","nodeType":"ElementaryTypeName","src":"3493:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3492:9:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2742,"nodeType":"FunctionDefinition","src":"3900:583:10","nodes":[],"body":{"id":2741,"nodeType":"Block","src":"4012:471:10","nodes":[],"statements":[{"assignments":[2685,2687],"declarations":[{"constant":false,"id":2685,"mutability":"mutable","name":"gasZRC20","nameLocation":"4031:8:10","nodeType":"VariableDeclaration","scope":2741,"src":"4023:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2684,"name":"address","nodeType":"ElementaryTypeName","src":"4023:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2687,"mutability":"mutable","name":"gasFee","nameLocation":"4049:6:10","nodeType":"VariableDeclaration","scope":2741,"src":"4041:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2686,"name":"uint256","nodeType":"ElementaryTypeName","src":"4041:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2694,"initialValue":{"arguments":[{"id":2692,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4100:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2689,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4066:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2688,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4059:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4073:26:10","memberName":"withdrawGasFeeWithGasLimit","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"4059:40:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$","typeString":"function (uint256) view external returns (address,uint256)"}},"id":2693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:50:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4022:87:10"},{"condition":{"id":2704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4123:75:10","subExpression":{"arguments":[{"expression":{"id":2699,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4154:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4158:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4154:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2701,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"4166:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2702,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4191:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2696,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"4131:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2695,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4124:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4141:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"4124:29:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:74:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2709,"nodeType":"IfStatement","src":"4119:135:10","trueBody":{"id":2708,"nodeType":"Block","src":"4200:54:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2705,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"4221:20:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4221:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2707,"nodeType":"RevertStatement","src":"4214:29:10"}]}},{"condition":{"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4268:62:10","subExpression":{"arguments":[{"expression":{"id":2714,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4296:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4300:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4296:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2718,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4316:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":2717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4308:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2716,"name":"address","nodeType":"ElementaryTypeName","src":"4308:7:10","typeDescriptions":{}}},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4308:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2720,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"4323:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2711,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4276:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2710,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4269:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"4269:26:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:61:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2727,"nodeType":"IfStatement","src":"4264:121:10","trueBody":{"id":2726,"nodeType":"Block","src":"4332:53:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2723,"name":"ZRC20TransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"4353:19:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4353:21:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2725,"nodeType":"RevertStatement","src":"4346:28:10"}]}},{"condition":{"id":2734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4399:27:10","subExpression":{"arguments":[{"id":2732,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"4419:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2729,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4407:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2728,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"4400:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4414:4:10","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":4777,"src":"4400:18:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) external returns (bool)"}},"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:26:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2738,"nodeType":"IfStatement","src":"4395:57:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2735,"name":"ZRC20BurnFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4399,"src":"4435:15:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4435:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2737,"nodeType":"RevertStatement","src":"4428:24:10"}},{"expression":{"id":2739,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"4470:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2683,"id":2740,"nodeType":"Return","src":"4463:13:10"}]},"documentation":{"id":2673,"nodeType":"StructuredDocumentation","src":"3636:259:10","text":"@dev Internal function to withdraw ZRC20 tokens with gas limit.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param gasLimit Gas limit.\n @return The gas fee for the withdrawal."},"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawZRC20WithGasLimit","nameLocation":"3909:26:10","parameters":{"id":2680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2675,"mutability":"mutable","name":"amount","nameLocation":"3944:6:10","nodeType":"VariableDeclaration","scope":2742,"src":"3936:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2674,"name":"uint256","nodeType":"ElementaryTypeName","src":"3936:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2677,"mutability":"mutable","name":"zrc20","nameLocation":"3960:5:10","nodeType":"VariableDeclaration","scope":2742,"src":"3952:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2676,"name":"address","nodeType":"ElementaryTypeName","src":"3952:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2679,"mutability":"mutable","name":"gasLimit","nameLocation":"3975:8:10","nodeType":"VariableDeclaration","scope":2742,"src":"3967:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3967:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3935:49:10"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2742,"src":"4003:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2681,"name":"uint256","nodeType":"ElementaryTypeName","src":"4003:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4002:9:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2790,"nodeType":"FunctionDefinition","src":"4658:313:10","nodes":[],"body":{"id":2789,"nodeType":"Block","src":"4718:253:10","nodes":[],"statements":[{"condition":{"id":2762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4732:66:10","subExpression":{"arguments":[{"expression":{"id":2754,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4764:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4768:6:10","memberName":"sender","nodeType":"MemberAccess","src":"4764:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2758,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4784:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":2757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2756,"name":"address","nodeType":"ElementaryTypeName","src":"4776:7:10","typeDescriptions":{}}},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4776:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2760,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4791:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2751,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4740:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2750,"name":"IWETH9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4708,"src":"4733:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH9_$4708_$","typeString":"type(contract IWETH9)"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH9_$4708","typeString":"contract IWETH9"}},"id":2753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4751:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4699,"src":"4733:30:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:65:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2766,"nodeType":"IfStatement","src":"4728:95:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2763,"name":"FailedZetaSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4807:14:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4807:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2765,"nodeType":"RevertStatement","src":"4800:23:10"}},{"expression":{"arguments":[{"id":2771,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4860:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":2768,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4840:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2767,"name":"IWETH9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4708,"src":"4833:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH9_$4708_$","typeString":"type(contract IWETH9)"}},"id":2769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:17:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH9_$4708","typeString":"contract IWETH9"}},"id":2770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4851:8:10","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":4707,"src":"4833:26:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:34:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2773,"nodeType":"ExpressionStatement","src":"4833:34:10"},{"assignments":[2775,null],"declarations":[{"constant":false,"id":2775,"mutability":"mutable","name":"sent","nameLocation":"4883:4:10","nodeType":"VariableDeclaration","scope":2789,"src":"4878:9:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2774,"name":"bool","nodeType":"ElementaryTypeName","src":"4878:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2782,"initialValue":{"arguments":[{"hexValue":"","id":2780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4917:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2776,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"4892:2:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:4:10","memberName":"call","nodeType":"MemberAccess","src":"4892:7:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2778,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2745,"src":"4908:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4892:24:10","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4892:28:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4877:43:10"},{"condition":{"id":2784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4934:5:10","subExpression":{"id":2783,"name":"sent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"4935:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2788,"nodeType":"IfStatement","src":"4930:34:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2785,"name":"FailedZetaSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4948:14:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4948:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2787,"nodeType":"RevertStatement","src":"4941:23:10"}}]},"documentation":{"id":2743,"nodeType":"StructuredDocumentation","src":"4489:164:10","text":"@dev Internal function to transfer ZETA tokens.\n @param amount The amount of tokens to transfer.\n @param to The address to transfer the tokens to."},"implemented":true,"kind":"function","modifiers":[],"name":"_transferZETA","nameLocation":"4667:13:10","parameters":{"id":2748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2745,"mutability":"mutable","name":"amount","nameLocation":"4689:6:10","nodeType":"VariableDeclaration","scope":2790,"src":"4681:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2744,"name":"uint256","nodeType":"ElementaryTypeName","src":"4681:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2747,"mutability":"mutable","name":"to","nameLocation":"4705:2:10","nodeType":"VariableDeclaration","scope":2790,"src":"4697:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2746,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4680:28:10"},"returnParameters":{"id":2749,"nodeType":"ParameterList","parameters":[],"src":"4718:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":2852,"nodeType":"FunctionDefinition","src":"5259:674:10","nodes":[],"body":{"id":2851,"nodeType":"Block","src":"5471:462:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2807,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"5485:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5494:6:10","memberName":"length","nodeType":"MemberAccess","src":"5485:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5504:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5485:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2814,"nodeType":"IfStatement","src":"5481:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2811,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"5514:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5514:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2813,"nodeType":"RevertStatement","src":"5507:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5541:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5551:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5541:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2821,"nodeType":"IfStatement","src":"5537:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2818,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"5561:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5561:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2820,"nodeType":"RevertStatement","src":"5554:32:10"}},{"assignments":[2823],"declarations":[{"constant":false,"id":2823,"mutability":"mutable","name":"gasFee","nameLocation":"5605:6:10","nodeType":"VariableDeclaration","scope":2851,"src":"5597:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2822,"name":"uint256","nodeType":"ElementaryTypeName","src":"5597:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2828,"initialValue":{"arguments":[{"id":2825,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5629:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2826,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5637:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2824,"name":"_withdrawZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"5614:14:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) returns (uint256)"}},"id":2827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5614:29:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5597:46:10"},{"eventCall":{"arguments":[{"expression":{"id":2830,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5681:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5685:6:10","memberName":"sender","nodeType":"MemberAccess","src":"5681:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5705:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2833,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2793,"src":"5720:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2834,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5742:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2835,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2795,"src":"5761:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2836,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2823,"src":"5781:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2838,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5808:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2837,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"5801:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5815:17:10","memberName":"PROTOCOL_FLAT_FEE","nodeType":"MemberAccess","referencedDeclaration":4808,"src":"5801:31:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5801:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":2842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5848:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2844,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2797,"src":"5871:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2843,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"5864:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5864:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5878:9:10","memberName":"GAS_LIMIT","nodeType":"MemberAccess","referencedDeclaration":4814,"src":"5864:23:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5864:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2848,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2800,"src":"5903:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2829,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"5658:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5658:268:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2850,"nodeType":"EmitStatement","src":"5653:273:10"}]},"baseFunctions":[4442],"documentation":{"id":2791,"nodeType":"StructuredDocumentation","src":"4977:277:10","text":"@notice Withdraw ZRC20 tokens to an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param revertOptions Revert options."},"functionSelector":"7c0dcb5f","implemented":true,"kind":"function","modifiers":[{"id":2803,"kind":"modifierInvocation","modifierName":{"id":2802,"name":"nonReentrant","nameLocations":["5432:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"5432:12:10"},"nodeType":"ModifierInvocation","src":"5432:12:10"},{"id":2805,"kind":"modifierInvocation","modifierName":{"id":2804,"name":"whenNotPaused","nameLocations":["5453:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"5453:13:10"},"nodeType":"ModifierInvocation","src":"5453:13:10"}],"name":"withdraw","nameLocation":"5268:8:10","parameters":{"id":2801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2793,"mutability":"mutable","name":"receiver","nameLocation":"5299:8:10","nodeType":"VariableDeclaration","scope":2852,"src":"5286:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2792,"name":"bytes","nodeType":"ElementaryTypeName","src":"5286:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2795,"mutability":"mutable","name":"amount","nameLocation":"5325:6:10","nodeType":"VariableDeclaration","scope":2852,"src":"5317:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2794,"name":"uint256","nodeType":"ElementaryTypeName","src":"5317:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2797,"mutability":"mutable","name":"zrc20","nameLocation":"5349:5:10","nodeType":"VariableDeclaration","scope":2852,"src":"5341:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2796,"name":"address","nodeType":"ElementaryTypeName","src":"5341:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2800,"mutability":"mutable","name":"revertOptions","nameLocation":"5387:13:10","nodeType":"VariableDeclaration","scope":2852,"src":"5364:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2799,"nodeType":"UserDefinedTypeName","pathNode":{"id":2798,"name":"RevertOptions","nameLocations":["5364:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"5364:13:10"},"referencedDeclaration":13,"src":"5364:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"5276:130:10"},"returnParameters":{"id":2806,"nodeType":"ParameterList","parameters":[],"src":"5471:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2915,"nodeType":"FunctionDefinition","src":"6348:749:10","nodes":[],"body":{"id":2914,"nodeType":"Block","src":"6625:472:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2873,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"6639:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6648:6:10","memberName":"length","nodeType":"MemberAccess","src":"6639:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6658:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6639:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2880,"nodeType":"IfStatement","src":"6635:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2877,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"6668:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6668:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2879,"nodeType":"RevertStatement","src":"6661:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2881,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6695:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6705:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6695:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2887,"nodeType":"IfStatement","src":"6691:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2884,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"6715:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2886,"nodeType":"RevertStatement","src":"6708:32:10"}},{"assignments":[2889],"declarations":[{"constant":false,"id":2889,"mutability":"mutable","name":"gasFee","nameLocation":"6759:6:10","nodeType":"VariableDeclaration","scope":2914,"src":"6751:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2888,"name":"uint256","nodeType":"ElementaryTypeName","src":"6751:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2895,"initialValue":{"arguments":[{"id":2891,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6795:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2892,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6803:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2893,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"6810:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2890,"name":"_withdrawZRC20WithGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2742,"src":"6768:26:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,uint256) returns (uint256)"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:51:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6751:68:10"},{"eventCall":{"arguments":[{"expression":{"id":2897,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6857:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6861:6:10","memberName":"sender","nodeType":"MemberAccess","src":"6857:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":2899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6881:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2900,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2855,"src":"6896:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2901,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6918:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2902,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2857,"src":"6937:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2903,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"6957:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":2905,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"6984:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2904,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"6977:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":2906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6977:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6991:17:10","memberName":"PROTOCOL_FLAT_FEE","nodeType":"MemberAccess","referencedDeclaration":4808,"src":"6977:31:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":2908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6977:33:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2909,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"7024:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":2910,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"7045:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2911,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"7067:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2896,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"6834:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6834:256:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2913,"nodeType":"EmitStatement","src":"6829:261:10"}]},"baseFunctions":[4472],"documentation":{"id":2853,"nodeType":"StructuredDocumentation","src":"5939:404:10","text":"@notice Withdraw ZRC20 tokens and call a smart contract on an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param zrc20 The address of the ZRC20 token.\n @param message The calldata to pass to the contract call.\n @param gasLimit Gas limit.\n @param revertOptions Revert options."},"functionSelector":"048ae42c","implemented":true,"kind":"function","modifiers":[{"id":2869,"kind":"modifierInvocation","modifierName":{"id":2868,"name":"nonReentrant","nameLocations":["6586:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"6586:12:10"},"nodeType":"ModifierInvocation","src":"6586:12:10"},{"id":2871,"kind":"modifierInvocation","modifierName":{"id":2870,"name":"whenNotPaused","nameLocations":["6607:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"6607:13:10"},"nodeType":"ModifierInvocation","src":"6607:13:10"}],"name":"withdrawAndCall","nameLocation":"6357:15:10","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2855,"mutability":"mutable","name":"receiver","nameLocation":"6395:8:10","nodeType":"VariableDeclaration","scope":2915,"src":"6382:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2854,"name":"bytes","nodeType":"ElementaryTypeName","src":"6382:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2857,"mutability":"mutable","name":"amount","nameLocation":"6421:6:10","nodeType":"VariableDeclaration","scope":2915,"src":"6413:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2856,"name":"uint256","nodeType":"ElementaryTypeName","src":"6413:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2859,"mutability":"mutable","name":"zrc20","nameLocation":"6445:5:10","nodeType":"VariableDeclaration","scope":2915,"src":"6437:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2858,"name":"address","nodeType":"ElementaryTypeName","src":"6437:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2861,"mutability":"mutable","name":"message","nameLocation":"6475:7:10","nodeType":"VariableDeclaration","scope":2915,"src":"6460:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2860,"name":"bytes","nodeType":"ElementaryTypeName","src":"6460:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2863,"mutability":"mutable","name":"gasLimit","nameLocation":"6500:8:10","nodeType":"VariableDeclaration","scope":2915,"src":"6492:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2862,"name":"uint256","nodeType":"ElementaryTypeName","src":"6492:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2866,"mutability":"mutable","name":"revertOptions","nameLocation":"6541:13:10","nodeType":"VariableDeclaration","scope":2915,"src":"6518:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2865,"nodeType":"UserDefinedTypeName","pathNode":{"id":2864,"name":"RevertOptions","nameLocations":["6518:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"6518:13:10"},"referencedDeclaration":13,"src":"6518:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"6372:188:10"},"returnParameters":{"id":2872,"nodeType":"ParameterList","parameters":[],"src":"6625:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2970,"nodeType":"FunctionDefinition","src":"7331:503:10","nodes":[],"body":{"id":2969,"nodeType":"Block","src":"7545:289:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2932,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"7559:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7568:6:10","memberName":"length","nodeType":"MemberAccess","src":"7559:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7578:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7559:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2939,"nodeType":"IfStatement","src":"7555:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2936,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"7588:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7588:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2938,"nodeType":"RevertStatement","src":"7581:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2940,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7615:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7625:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7615:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2946,"nodeType":"IfStatement","src":"7611:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2943,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"7635:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7635:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2945,"nodeType":"RevertStatement","src":"7628:31:10"}},{"expression":{"arguments":[{"id":2948,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7684:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2949,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"7692:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2947,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"7670:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":2950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7670:46:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2951,"nodeType":"ExpressionStatement","src":"7670:46:10"},{"eventCall":{"arguments":[{"expression":{"id":2953,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7741:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7745:6:10","memberName":"sender","nodeType":"MemberAccess","src":"7741:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2955,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"7753:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2956,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"7762:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":2959,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"7780:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7772:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2957,"name":"address","nodeType":"ElementaryTypeName","src":"7772:7:10","typeDescriptions":{}}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7772:18:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2961,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2920,"src":"7792:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":2962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7800:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7803:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"","id":2964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7806:2:10","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"hexValue":"30","id":2965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7810:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2966,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"7813:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":2952,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"7731:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7731:96:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2968,"nodeType":"EmitStatement","src":"7726:101:10"}]},"baseFunctions":[4455],"documentation":{"id":2916,"nodeType":"StructuredDocumentation","src":"7103:223:10","text":"@notice Withdraw ZETA tokens to an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param revertOptions Revert options."},"functionSelector":"97a1cef1","implemented":true,"kind":"function","modifiers":[{"id":2928,"kind":"modifierInvocation","modifierName":{"id":2927,"name":"nonReentrant","nameLocations":["7506:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"7506:12:10"},"nodeType":"ModifierInvocation","src":"7506:12:10"},{"id":2930,"kind":"modifierInvocation","modifierName":{"id":2929,"name":"whenNotPaused","nameLocations":["7527:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"7527:13:10"},"nodeType":"ModifierInvocation","src":"7527:13:10"}],"name":"withdraw","nameLocation":"7340:8:10","parameters":{"id":2926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"mutability":"mutable","name":"receiver","nameLocation":"7371:8:10","nodeType":"VariableDeclaration","scope":2970,"src":"7358:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2917,"name":"bytes","nodeType":"ElementaryTypeName","src":"7358:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2920,"mutability":"mutable","name":"amount","nameLocation":"7397:6:10","nodeType":"VariableDeclaration","scope":2970,"src":"7389:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2919,"name":"uint256","nodeType":"ElementaryTypeName","src":"7389:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2922,"mutability":"mutable","name":"chainId","nameLocation":"7421:7:10","nodeType":"VariableDeclaration","scope":2970,"src":"7413:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2921,"name":"uint256","nodeType":"ElementaryTypeName","src":"7413:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2925,"mutability":"mutable","name":"revertOptions","nameLocation":"7461:13:10","nodeType":"VariableDeclaration","scope":2970,"src":"7438:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2924,"nodeType":"UserDefinedTypeName","pathNode":{"id":2923,"name":"RevertOptions","nameLocations":["7438:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"7438:13:10"},"referencedDeclaration":13,"src":"7438:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"7348:132:10"},"returnParameters":{"id":2931,"nodeType":"ParameterList","parameters":[],"src":"7545:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3027,"nodeType":"FunctionDefinition","src":"8215:547:10","nodes":[],"body":{"id":3026,"nodeType":"Block","src":"8468:294:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2989,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"8482:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8491:6:10","memberName":"length","nodeType":"MemberAccess","src":"8482:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8501:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8482:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2996,"nodeType":"IfStatement","src":"8478:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2993,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"8511:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8511:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2995,"nodeType":"RevertStatement","src":"8504:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2997,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8538:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8548:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8538:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3003,"nodeType":"IfStatement","src":"8534:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3000,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"8558:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8558:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3002,"nodeType":"RevertStatement","src":"8551:31:10"}},{"expression":{"arguments":[{"id":3005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8607:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3006,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"8615:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3004,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"8593:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8593:46:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3008,"nodeType":"ExpressionStatement","src":"8593:46:10"},{"eventCall":{"arguments":[{"expression":{"id":3010,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8664:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8668:6:10","memberName":"sender","nodeType":"MemberAccess","src":"8664:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3012,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2977,"src":"8676:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3013,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"8685:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":3016,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"8703:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8695:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3014,"name":"address","nodeType":"ElementaryTypeName","src":"8695:7:10","typeDescriptions":{}}},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8695:18:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3018,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2975,"src":"8715:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":3019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8723:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8726:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3021,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2979,"src":"8729:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"30","id":3022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8738:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3023,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2982,"src":"8741:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":3009,"name":"Withdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"8654:9:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,uint256,bytes memory,address,uint256,uint256,uint256,bytes memory,uint256,struct RevertOptions memory)"}},"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8654:101:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3025,"nodeType":"EmitStatement","src":"8649:106:10"}]},"baseFunctions":[4487],"documentation":{"id":2971,"nodeType":"StructuredDocumentation","src":"7840:370:10","text":"@notice Withdraw ZETA tokens and call a smart contract on an external chain.\n @param receiver The receiver address on the external chain.\n @param amount The amount of tokens to withdraw.\n @param chainId Chain id of the external chain.\n @param message The calldata to pass to the contract call.\n @param revertOptions Revert options."},"functionSelector":"3b283933","implemented":true,"kind":"function","modifiers":[{"id":2985,"kind":"modifierInvocation","modifierName":{"id":2984,"name":"nonReentrant","nameLocations":["8429:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"8429:12:10"},"nodeType":"ModifierInvocation","src":"8429:12:10"},{"id":2987,"kind":"modifierInvocation","modifierName":{"id":2986,"name":"whenNotPaused","nameLocations":["8450:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"8450:13:10"},"nodeType":"ModifierInvocation","src":"8450:13:10"}],"name":"withdrawAndCall","nameLocation":"8224:15:10","parameters":{"id":2983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2973,"mutability":"mutable","name":"receiver","nameLocation":"8262:8:10","nodeType":"VariableDeclaration","scope":3027,"src":"8249:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2972,"name":"bytes","nodeType":"ElementaryTypeName","src":"8249:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2975,"mutability":"mutable","name":"amount","nameLocation":"8288:6:10","nodeType":"VariableDeclaration","scope":3027,"src":"8280:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2974,"name":"uint256","nodeType":"ElementaryTypeName","src":"8280:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2977,"mutability":"mutable","name":"chainId","nameLocation":"8312:7:10","nodeType":"VariableDeclaration","scope":3027,"src":"8304:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2976,"name":"uint256","nodeType":"ElementaryTypeName","src":"8304:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2979,"mutability":"mutable","name":"message","nameLocation":"8344:7:10","nodeType":"VariableDeclaration","scope":3027,"src":"8329:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2978,"name":"bytes","nodeType":"ElementaryTypeName","src":"8329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2982,"mutability":"mutable","name":"revertOptions","nameLocation":"8384:13:10","nodeType":"VariableDeclaration","scope":3027,"src":"8361:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":2981,"nodeType":"UserDefinedTypeName","pathNode":{"id":2980,"name":"RevertOptions","nameLocations":["8361:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"8361:13:10"},"referencedDeclaration":13,"src":"8361:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"8239:164:10"},"returnParameters":{"id":2988,"nodeType":"ParameterList","parameters":[],"src":"8468:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3099,"nodeType":"FunctionDefinition","src":"9116:688:10","nodes":[],"body":{"id":3098,"nodeType":"Block","src":"9358:446:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3046,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"9372:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9381:6:10","memberName":"length","nodeType":"MemberAccess","src":"9372:15:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9372:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3053,"nodeType":"IfStatement","src":"9368:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3050,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"9401:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9401:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3052,"nodeType":"RevertStatement","src":"9394:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3054,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"9428:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9436:6:10","memberName":"length","nodeType":"MemberAccess","src":"9428:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9446:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9428:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3061,"nodeType":"IfStatement","src":"9424:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3058,"name":"EmptyMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4423,"src":"9456:12:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3060,"nodeType":"RevertStatement","src":"9449:21:10"}},{"assignments":[3063,3065],"declarations":[{"constant":false,"id":3063,"mutability":"mutable","name":"gasZRC20","nameLocation":"9490:8:10","nodeType":"VariableDeclaration","scope":3098,"src":"9482:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3062,"name":"address","nodeType":"ElementaryTypeName","src":"9482:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3065,"mutability":"mutable","name":"gasFee","nameLocation":"9508:6:10","nodeType":"VariableDeclaration","scope":3098,"src":"9500:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3064,"name":"uint256","nodeType":"ElementaryTypeName","src":"9500:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3072,"initialValue":{"arguments":[{"id":3070,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"9559:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3067,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"9525:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3066,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"9518:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9518:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9532:26:10","memberName":"withdrawGasFeeWithGasLimit","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"9518:40:10","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint256_$","typeString":"function (uint256) view external returns (address,uint256)"}},"id":3071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9518:50:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"9481:87:10"},{"condition":{"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9582:75:10","subExpression":{"arguments":[{"expression":{"id":3077,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9613:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9617:6:10","memberName":"sender","nodeType":"MemberAccess","src":"9613:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3079,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"9625:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3080,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"9650:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3074,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"9590:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3073,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"9583:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:16:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9600:12:10","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"9583:29:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:74:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3087,"nodeType":"IfStatement","src":"9578:135:10","trueBody":{"id":3086,"nodeType":"Block","src":"9659:54:10","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3083,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"9680:20:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9680:22:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3085,"nodeType":"RevertStatement","src":"9673:29:10"}]}},{"eventCall":{"arguments":[{"expression":{"id":3089,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9735:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9739:6:10","memberName":"sender","nodeType":"MemberAccess","src":"9735:10:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3091,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3032,"src":"9747:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3092,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"9754:8:10","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3093,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"9764:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":3094,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"9773:8:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3095,"name":"revertOptions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3039,"src":"9783:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions calldata"}],"id":3088,"name":"Called","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4361,"src":"9728:6:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_struct$_RevertOptions_$13_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,bytes memory,uint256,struct RevertOptions memory)"}},"id":3096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9728:69:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3097,"nodeType":"EmitStatement","src":"9723:74:10"}]},"baseFunctions":[4502],"documentation":{"id":3028,"nodeType":"StructuredDocumentation","src":"8768:343:10","text":"@notice Call a smart contract on an external chain without asset transfer.\n @param receiver The receiver address on the external chain.\n @param zrc20 Address of zrc20 to pay fees.\n @param message The calldata to pass to the contract call.\n @param gasLimit Gas limit.\n @param revertOptions Revert options."},"functionSelector":"1cb5ea75","implemented":true,"kind":"function","modifiers":[{"id":3042,"kind":"modifierInvocation","modifierName":{"id":3041,"name":"nonReentrant","nameLocations":["9319:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":44962,"src":"9319:12:10"},"nodeType":"ModifierInvocation","src":"9319:12:10"},{"id":3044,"kind":"modifierInvocation","modifierName":{"id":3043,"name":"whenNotPaused","nameLocations":["9340:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"9340:13:10"},"nodeType":"ModifierInvocation","src":"9340:13:10"}],"name":"call","nameLocation":"9125:4:10","parameters":{"id":3040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3030,"mutability":"mutable","name":"receiver","nameLocation":"9152:8:10","nodeType":"VariableDeclaration","scope":3099,"src":"9139:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3029,"name":"bytes","nodeType":"ElementaryTypeName","src":"9139:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3032,"mutability":"mutable","name":"zrc20","nameLocation":"9178:5:10","nodeType":"VariableDeclaration","scope":3099,"src":"9170:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3031,"name":"address","nodeType":"ElementaryTypeName","src":"9170:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3034,"mutability":"mutable","name":"message","nameLocation":"9208:7:10","nodeType":"VariableDeclaration","scope":3099,"src":"9193:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3033,"name":"bytes","nodeType":"ElementaryTypeName","src":"9193:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3036,"mutability":"mutable","name":"gasLimit","nameLocation":"9233:8:10","nodeType":"VariableDeclaration","scope":3099,"src":"9225:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3035,"name":"uint256","nodeType":"ElementaryTypeName","src":"9225:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3039,"mutability":"mutable","name":"revertOptions","nameLocation":"9274:13:10","nodeType":"VariableDeclaration","scope":3099,"src":"9251:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_calldata_ptr","typeString":"struct RevertOptions"},"typeName":{"id":3038,"nodeType":"UserDefinedTypeName","pathNode":{"id":3037,"name":"RevertOptions","nameLocations":["9251:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":13,"src":"9251:13:10"},"referencedDeclaration":13,"src":"9251:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertOptions_$13_storage_ptr","typeString":"struct RevertOptions"}},"visibility":"internal"}],"src":"9129:164:10"},"returnParameters":{"id":3045,"nodeType":"ParameterList","parameters":[],"src":"9358:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3164,"nodeType":"FunctionDefinition","src":"10042:426:10","nodes":[],"body":{"id":3163,"nodeType":"Block","src":"10142:326:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3113,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"10156:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10173:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10165:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3114,"name":"address","nodeType":"ElementaryTypeName","src":"10165:7:10","typeDescriptions":{}}},"id":3117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10165:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10156:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3119,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10179:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3120,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:10","typeDescriptions":{}}},"id":3123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10179:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10156:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3129,"nodeType":"IfStatement","src":"10152:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3126,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"10208:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10208:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3128,"nodeType":"RevertStatement","src":"10201:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"10235:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10245:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10235:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3136,"nodeType":"IfStatement","src":"10231:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3133,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"10255:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10255:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3135,"nodeType":"RevertStatement","src":"10248:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3137,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10295:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3138,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"10305:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10295:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3140,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10332:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3143,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10350:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10342:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3141,"name":"address","nodeType":"ElementaryTypeName","src":"10342:7:10","typeDescriptions":{}}},"id":3144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10342:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10332:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10295:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3150,"nodeType":"IfStatement","src":"10291:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3147,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"10364:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10364:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3149,"nodeType":"RevertStatement","src":"10357:22:10"}},{"condition":{"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10394:38:10","subExpression":{"arguments":[{"id":3155,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"10417:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3156,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"10425:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3152,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"10402:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3151,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10395:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10395:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10409:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"10395:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10395:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3162,"nodeType":"IfStatement","src":"10390:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3159,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"10441:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10441:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3161,"nodeType":"RevertStatement","src":"10434:27:10"}}]},"baseFunctions":[4512],"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"9810:227:10","text":"@notice Deposit foreign coins into ZRC20.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to deposit.\n @param target The target address to receive the deposited tokens."},"functionSelector":"f45346dc","implemented":true,"kind":"function","modifiers":[{"id":3109,"kind":"modifierInvocation","modifierName":{"id":3108,"name":"onlyFungible","nameLocations":["10115:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"10115:12:10"},"nodeType":"ModifierInvocation","src":"10115:12:10"},{"id":3111,"kind":"modifierInvocation","modifierName":{"id":3110,"name":"whenNotPaused","nameLocations":["10128:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"10128:13:10"},"nodeType":"ModifierInvocation","src":"10128:13:10"}],"name":"deposit","nameLocation":"10051:7:10","parameters":{"id":3107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3102,"mutability":"mutable","name":"zrc20","nameLocation":"10067:5:10","nodeType":"VariableDeclaration","scope":3164,"src":"10059:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3101,"name":"address","nodeType":"ElementaryTypeName","src":"10059:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3104,"mutability":"mutable","name":"amount","nameLocation":"10082:6:10","nodeType":"VariableDeclaration","scope":3164,"src":"10074:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3103,"name":"uint256","nodeType":"ElementaryTypeName","src":"10074:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3106,"mutability":"mutable","name":"target","nameLocation":"10098:6:10","nodeType":"VariableDeclaration","scope":3164,"src":"10090:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3105,"name":"address","nodeType":"ElementaryTypeName","src":"10090:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10058:47:10"},"returnParameters":{"id":3112,"nodeType":"ParameterList","parameters":[],"src":"10142:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3211,"nodeType":"FunctionDefinition","src":"10819:397:10","nodes":[],"body":{"id":3210,"nodeType":"Block","src":"11044:172:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3183,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3170,"src":"11058:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11075:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11067:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3184,"name":"address","nodeType":"ElementaryTypeName","src":"11067:7:10","typeDescriptions":{}}},"id":3187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11067:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11058:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3189,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"11081:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11099:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11091:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3190,"name":"address","nodeType":"ElementaryTypeName","src":"11091:7:10","typeDescriptions":{}}},"id":3193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11091:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11081:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11058:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3199,"nodeType":"IfStatement","src":"11054:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3196,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"11110:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11110:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3198,"nodeType":"RevertStatement","src":"11103:20:10"}},{"expression":{"arguments":[{"id":3204,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"11177:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3205,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3170,"src":"11186:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3206,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3172,"src":"11193:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3207,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3176,"src":"11201:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3201,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"11152:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3200,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"11134:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11134:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11160:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"11134:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11134:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3209,"nodeType":"ExpressionStatement","src":"11134:75:10"}]},"baseFunctions":[4527],"documentation":{"id":3165,"nodeType":"StructuredDocumentation","src":"10474:340:10","text":"@notice Execute a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"bcf7f32b","implemented":true,"kind":"function","modifiers":[{"id":3179,"kind":"modifierInvocation","modifierName":{"id":3178,"name":"onlyFungible","nameLocations":["11005:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"11005:12:10"},"nodeType":"ModifierInvocation","src":"11005:12:10"},{"id":3181,"kind":"modifierInvocation","modifierName":{"id":3180,"name":"whenNotPaused","nameLocations":["11026:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11026:13:10"},"nodeType":"ModifierInvocation","src":"11026:13:10"}],"name":"execute","nameLocation":"10828:7:10","parameters":{"id":3177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3168,"mutability":"mutable","name":"context","nameLocation":"10863:7:10","nodeType":"VariableDeclaration","scope":3211,"src":"10845:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3167,"nodeType":"UserDefinedTypeName","pathNode":{"id":3166,"name":"zContext","nameLocations":["10845:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"10845:8:10"},"referencedDeclaration":4914,"src":"10845:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3170,"mutability":"mutable","name":"zrc20","nameLocation":"10888:5:10","nodeType":"VariableDeclaration","scope":3211,"src":"10880:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3169,"name":"address","nodeType":"ElementaryTypeName","src":"10880:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3172,"mutability":"mutable","name":"amount","nameLocation":"10911:6:10","nodeType":"VariableDeclaration","scope":3211,"src":"10903:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3171,"name":"uint256","nodeType":"ElementaryTypeName","src":"10903:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3174,"mutability":"mutable","name":"target","nameLocation":"10935:6:10","nodeType":"VariableDeclaration","scope":3211,"src":"10927:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3173,"name":"address","nodeType":"ElementaryTypeName","src":"10927:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3176,"mutability":"mutable","name":"message","nameLocation":"10966:7:10","nodeType":"VariableDeclaration","scope":3211,"src":"10951:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3175,"name":"bytes","nodeType":"ElementaryTypeName","src":"10951:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10835:144:10"},"returnParameters":{"id":3182,"nodeType":"ParameterList","parameters":[],"src":"11044:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3291,"nodeType":"FunctionDefinition","src":"11601:642:10","nodes":[],"body":{"id":3290,"nodeType":"Block","src":"11833:410:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3230,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"11847:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11864:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11856:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3231,"name":"address","nodeType":"ElementaryTypeName","src":"11856:7:10","typeDescriptions":{}}},"id":3234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11856:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11847:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3236,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"11870:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11888:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11880:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3237,"name":"address","nodeType":"ElementaryTypeName","src":"11880:7:10","typeDescriptions":{}}},"id":3240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11880:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11870:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11847:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3246,"nodeType":"IfStatement","src":"11843:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3243,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"11899:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11899:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3245,"nodeType":"RevertStatement","src":"11892:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3247,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"11926:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11936:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11926:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3253,"nodeType":"IfStatement","src":"11922:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3250,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"11946:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11946:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3252,"nodeType":"RevertStatement","src":"11939:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3254,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"11985:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3255,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"11995:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11985:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3257,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12022:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3260,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12040:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12032:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3258,"name":"address","nodeType":"ElementaryTypeName","src":"12032:7:10","typeDescriptions":{}}},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12032:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12022:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11985:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3267,"nodeType":"IfStatement","src":"11981:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3264,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"12054:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12054:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3266,"nodeType":"RevertStatement","src":"12047:22:10"}},{"condition":{"id":3275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12084:38:10","subExpression":{"arguments":[{"id":3272,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12107:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3273,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"12115:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3269,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"12092:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3268,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"12085:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12085:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12099:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"12085:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12085:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3279,"nodeType":"IfStatement","src":"12080:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3276,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"12131:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12131:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3278,"nodeType":"RevertStatement","src":"12124:27:10"}},{"expression":{"arguments":[{"id":3284,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3215,"src":"12204:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3285,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3217,"src":"12213:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3286,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3219,"src":"12220:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3287,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3223,"src":"12228:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3281,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3221,"src":"12179:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3280,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"12161:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12161:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12187:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"12161:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12161:75:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3289,"nodeType":"ExpressionStatement","src":"12161:75:10"}]},"baseFunctions":[4542],"documentation":{"id":3212,"nodeType":"StructuredDocumentation","src":"11222:374:10","text":"@notice Deposit foreign coins into ZRC20 and call a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"c39aca37","implemented":true,"kind":"function","modifiers":[{"id":3226,"kind":"modifierInvocation","modifierName":{"id":3225,"name":"onlyFungible","nameLocations":["11794:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"11794:12:10"},"nodeType":"ModifierInvocation","src":"11794:12:10"},{"id":3228,"kind":"modifierInvocation","modifierName":{"id":3227,"name":"whenNotPaused","nameLocations":["11815:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"11815:13:10"},"nodeType":"ModifierInvocation","src":"11815:13:10"}],"name":"depositAndCall","nameLocation":"11610:14:10","parameters":{"id":3224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3215,"mutability":"mutable","name":"context","nameLocation":"11652:7:10","nodeType":"VariableDeclaration","scope":3291,"src":"11634:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3214,"nodeType":"UserDefinedTypeName","pathNode":{"id":3213,"name":"zContext","nameLocations":["11634:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"11634:8:10"},"referencedDeclaration":4914,"src":"11634:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3217,"mutability":"mutable","name":"zrc20","nameLocation":"11677:5:10","nodeType":"VariableDeclaration","scope":3291,"src":"11669:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3216,"name":"address","nodeType":"ElementaryTypeName","src":"11669:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3219,"mutability":"mutable","name":"amount","nameLocation":"11700:6:10","nodeType":"VariableDeclaration","scope":3291,"src":"11692:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3218,"name":"uint256","nodeType":"ElementaryTypeName","src":"11692:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3221,"mutability":"mutable","name":"target","nameLocation":"11724:6:10","nodeType":"VariableDeclaration","scope":3291,"src":"11716:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3220,"name":"address","nodeType":"ElementaryTypeName","src":"11716:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3223,"mutability":"mutable","name":"message","nameLocation":"11755:7:10","nodeType":"VariableDeclaration","scope":3291,"src":"11740:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3222,"name":"bytes","nodeType":"ElementaryTypeName","src":"11740:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11624:144:10"},"returnParameters":{"id":3229,"nodeType":"ParameterList","parameters":[],"src":"11833:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3355,"nodeType":"FunctionDefinition","src":"12555:557:10","nodes":[],"body":{"id":3354,"nodeType":"Block","src":"12764:348:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3308,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12778:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12796:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3310,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12788:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3309,"name":"address","nodeType":"ElementaryTypeName","src":"12788:7:10","typeDescriptions":{}}},"id":3312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12788:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12778:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3317,"nodeType":"IfStatement","src":"12774:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3314,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"12807:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12807:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3316,"nodeType":"RevertStatement","src":"12800:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3318,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"12834:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12844:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12834:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3324,"nodeType":"IfStatement","src":"12830:48:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3321,"name":"InsufficientZetaAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4396,"src":"12854:22:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12854:24:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3323,"nodeType":"RevertStatement","src":"12847:31:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3325,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12892:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3326,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"12902:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12892:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3328,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"12929:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3331,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12947:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12939:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3329,"name":"address","nodeType":"ElementaryTypeName","src":"12939:7:10","typeDescriptions":{}}},"id":3332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12939:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12929:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12892:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3338,"nodeType":"IfStatement","src":"12888:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3335,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"12961:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12961:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3337,"nodeType":"RevertStatement","src":"12954:22:10"}},{"expression":{"arguments":[{"id":3340,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"13001:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3341,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"13009:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3339,"name":"_transferZETA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"12987:13:10","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":3342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12987:29:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3343,"nodeType":"ExpressionStatement","src":"12987:29:10"},{"expression":{"arguments":[{"id":3348,"name":"context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3295,"src":"13069:7:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"}},{"id":3349,"name":"zetaToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"13078:9:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3350,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"13089:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3351,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3301,"src":"13097:7:10","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"arguments":[{"id":3345,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3299,"src":"13044:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3344,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"13026:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13026:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13052:16:10","memberName":"onCrossChainCall","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"13026:42:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_zContext_$4914_memory_ptr_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct zContext memory,address,uint256,bytes memory) external"}},"id":3352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13026:79:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3353,"nodeType":"ExpressionStatement","src":"13026:79:10"}]},"baseFunctions":[4555],"documentation":{"id":3292,"nodeType":"StructuredDocumentation","src":"12249:301:10","text":"@notice Deposit ZETA and call a user-specified contract on ZEVM.\n @param context The context of the cross-chain call.\n @param amount The amount of tokens to transfer.\n @param target The target contract to call.\n @param message The calldata to pass to the contract call."},"functionSelector":"21501a95","implemented":true,"kind":"function","modifiers":[{"id":3304,"kind":"modifierInvocation","modifierName":{"id":3303,"name":"onlyFungible","nameLocations":["12725:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"12725:12:10"},"nodeType":"ModifierInvocation","src":"12725:12:10"},{"id":3306,"kind":"modifierInvocation","modifierName":{"id":3305,"name":"whenNotPaused","nameLocations":["12746:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"12746:13:10"},"nodeType":"ModifierInvocation","src":"12746:13:10"}],"name":"depositAndCall","nameLocation":"12564:14:10","parameters":{"id":3302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3295,"mutability":"mutable","name":"context","nameLocation":"12606:7:10","nodeType":"VariableDeclaration","scope":3355,"src":"12588:25:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_calldata_ptr","typeString":"struct zContext"},"typeName":{"id":3294,"nodeType":"UserDefinedTypeName","pathNode":{"id":3293,"name":"zContext","nameLocations":["12588:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4914,"src":"12588:8:10"},"referencedDeclaration":4914,"src":"12588:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_zContext_$4914_storage_ptr","typeString":"struct zContext"}},"visibility":"internal"},{"constant":false,"id":3297,"mutability":"mutable","name":"amount","nameLocation":"12631:6:10","nodeType":"VariableDeclaration","scope":3355,"src":"12623:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3296,"name":"uint256","nodeType":"ElementaryTypeName","src":"12623:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3299,"mutability":"mutable","name":"target","nameLocation":"12655:6:10","nodeType":"VariableDeclaration","scope":3355,"src":"12647:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3298,"name":"address","nodeType":"ElementaryTypeName","src":"12647:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3301,"mutability":"mutable","name":"message","nameLocation":"12686:7:10","nodeType":"VariableDeclaration","scope":3355,"src":"12671:22:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3300,"name":"bytes","nodeType":"ElementaryTypeName","src":"12671:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12578:121:10"},"returnParameters":{"id":3307,"nodeType":"ParameterList","parameters":[],"src":"12764:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3386,"nodeType":"FunctionDefinition","src":"13292:236:10","nodes":[],"body":{"id":3385,"nodeType":"Block","src":"13405:123:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3368,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"13419:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13437:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13429:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3369,"name":"address","nodeType":"ElementaryTypeName","src":"13429:7:10","typeDescriptions":{}}},"id":3372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13429:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13419:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3377,"nodeType":"IfStatement","src":"13415:46:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3374,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"13448:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13448:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3376,"nodeType":"RevertStatement","src":"13441:20:10"}},{"expression":{"arguments":[{"id":3382,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3361,"src":"13507:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":3379,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"13490:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3378,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"13472:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13472:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13498:8:10","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"13472:34:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13472:49:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3384,"nodeType":"ExpressionStatement","src":"13472:49:10"}]},"baseFunctions":[4564],"documentation":{"id":3356,"nodeType":"StructuredDocumentation","src":"13118:169:10","text":"@notice Revert a user-specified contract on ZEVM.\n @param target The target contract to call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"717d335f","implemented":true,"kind":"function","modifiers":[{"id":3364,"kind":"modifierInvocation","modifierName":{"id":3363,"name":"onlyFungible","nameLocations":["13378:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"13378:12:10"},"nodeType":"ModifierInvocation","src":"13378:12:10"},{"id":3366,"kind":"modifierInvocation","modifierName":{"id":3365,"name":"whenNotPaused","nameLocations":["13391:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"13391:13:10"},"nodeType":"ModifierInvocation","src":"13391:13:10"}],"name":"executeRevert","nameLocation":"13301:13:10","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3358,"mutability":"mutable","name":"target","nameLocation":"13323:6:10","nodeType":"VariableDeclaration","scope":3386,"src":"13315:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3357,"name":"address","nodeType":"ElementaryTypeName","src":"13315:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3361,"mutability":"mutable","name":"revertContext","nameLocation":"13354:13:10","nodeType":"VariableDeclaration","scope":3386,"src":"13331:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":3360,"nodeType":"UserDefinedTypeName","pathNode":{"id":3359,"name":"RevertContext","nameLocations":["13331:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"13331:13:10"},"referencedDeclaration":21,"src":"13331:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"13314:54:10"},"returnParameters":{"id":3367,"nodeType":"ParameterList","parameters":[],"src":"13405:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3461,"nodeType":"FunctionDefinition","src":"13852:597:10","nodes":[],"body":{"id":3460,"nodeType":"Block","src":"14065:384:10","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3403,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"14079:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14096:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14088:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3404,"name":"address","nodeType":"ElementaryTypeName","src":"14088:7:10","typeDescriptions":{}}},"id":3407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14088:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14079:19:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3409,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14102:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14120:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14112:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3410,"name":"address","nodeType":"ElementaryTypeName","src":"14112:7:10","typeDescriptions":{}}},"id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14112:10:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14102:20:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14079:43:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3419,"nodeType":"IfStatement","src":"14075:69:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3416,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2508,"src":"14131:11:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14131:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3418,"nodeType":"RevertStatement","src":"14124:20:10"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3420,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"14158:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14168:1:10","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14158:11:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3426,"nodeType":"IfStatement","src":"14154:49:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3423,"name":"InsufficientZRC20Amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4393,"src":"14178:23:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14178:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3425,"nodeType":"RevertStatement","src":"14171:32:10"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3427,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14217:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3428,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"14227:23:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14217:33:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3430,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14254:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3433,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14272:4:10","typeDescriptions":{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GatewayZEVM_$3462","typeString":"contract GatewayZEVM"}],"id":3432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14264:7:10","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3431,"name":"address","nodeType":"ElementaryTypeName","src":"14264:7:10","typeDescriptions":{}}},"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14264:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14254:23:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14217:60:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3440,"nodeType":"IfStatement","src":"14213:88:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3437,"name":"InvalidTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"14286:13:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14286:15:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3439,"nodeType":"RevertStatement","src":"14279:22:10"}},{"condition":{"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14316:38:10","subExpression":{"arguments":[{"id":3445,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14339:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3446,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"14347:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3442,"name":"zrc20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"14324:5:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3441,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"14317:6:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14317:13:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":3444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14331:7:10","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4770,"src":"14317:21:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14317:37:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3452,"nodeType":"IfStatement","src":"14312:71:10","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3449,"name":"ZRC20DepositFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4405,"src":"14363:18:10","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14363:20:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3451,"nodeType":"RevertStatement","src":"14356:27:10"}},{"expression":{"arguments":[{"id":3457,"name":"revertContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3396,"src":"14428:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext calldata"}],"expression":{"arguments":[{"id":3454,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3393,"src":"14411:6:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3453,"name":"UniversalContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"14393:17:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UniversalContract_$4947_$","typeString":"type(contract UniversalContract)"}},"id":3455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:25:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_UniversalContract_$4947","typeString":"contract UniversalContract"}},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14419:8:10","memberName":"onRevert","nodeType":"MemberAccess","referencedDeclaration":4946,"src":"14393:34:10","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RevertContext_$21_memory_ptr_$returns$__$","typeString":"function (struct RevertContext memory) external"}},"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:49:10","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3459,"nodeType":"ExpressionStatement","src":"14393:49:10"}]},"baseFunctions":[4577],"documentation":{"id":3387,"nodeType":"StructuredDocumentation","src":"13534:313:10","text":"@notice Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM.\n @param zrc20 The address of the ZRC20 token.\n @param amount The amount of tokens to revert.\n @param target The target contract to call.\n @param revertContext Revert context to pass to onRevert."},"functionSelector":"0310eb76","implemented":true,"kind":"function","modifiers":[{"id":3399,"kind":"modifierInvocation","modifierName":{"id":3398,"name":"onlyFungible","nameLocations":["14026:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":2535,"src":"14026:12:10"},"nodeType":"ModifierInvocation","src":"14026:12:10"},{"id":3401,"kind":"modifierInvocation","modifierName":{"id":3400,"name":"whenNotPaused","nameLocations":["14047:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44795,"src":"14047:13:10"},"nodeType":"ModifierInvocation","src":"14047:13:10"}],"name":"depositAndRevert","nameLocation":"13861:16:10","parameters":{"id":3397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3389,"mutability":"mutable","name":"zrc20","nameLocation":"13895:5:10","nodeType":"VariableDeclaration","scope":3461,"src":"13887:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3388,"name":"address","nodeType":"ElementaryTypeName","src":"13887:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3391,"mutability":"mutable","name":"amount","nameLocation":"13918:6:10","nodeType":"VariableDeclaration","scope":3461,"src":"13910:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3390,"name":"uint256","nodeType":"ElementaryTypeName","src":"13910:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3393,"mutability":"mutable","name":"target","nameLocation":"13942:6:10","nodeType":"VariableDeclaration","scope":3461,"src":"13934:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3392,"name":"address","nodeType":"ElementaryTypeName","src":"13934:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3396,"mutability":"mutable","name":"revertContext","nameLocation":"13981:13:10","nodeType":"VariableDeclaration","scope":3461,"src":"13958:36:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_calldata_ptr","typeString":"struct RevertContext"},"typeName":{"id":3395,"nodeType":"UserDefinedTypeName","pathNode":{"id":3394,"name":"RevertContext","nameLocations":["13958:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"13958:13:10"},"referencedDeclaration":21,"src":"13958:13:10","typeDescriptions":{"typeIdentifier":"t_struct$_RevertContext_$21_storage_ptr","typeString":"struct RevertContext"}},"visibility":"internal"}],"src":"13877:123:10"},"returnParameters":{"id":3402,"nodeType":"ParameterList","parameters":[],"src":"14065:0:10"},"scope":3462,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":2494,"name":"IGatewayZEVM","nameLocations":["986:12:10"],"nodeType":"IdentifierPath","referencedDeclaration":4578,"src":"986:12:10"},"id":2495,"nodeType":"InheritanceSpecifier","src":"986:12:10"},{"baseName":{"id":2496,"name":"Initializable","nameLocations":["1004:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":44489,"src":"1004:13:10"},"id":2497,"nodeType":"InheritanceSpecifier","src":"1004:13:10"},{"baseName":{"id":2498,"name":"AccessControlUpgradeable","nameLocations":["1023:24:10"],"nodeType":"IdentifierPath","referencedDeclaration":44235,"src":"1023:24:10"},"id":2499,"nodeType":"InheritanceSpecifier","src":"1023:24:10"},{"baseName":{"id":2500,"name":"UUPSUpgradeable","nameLocations":["1053:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":44671,"src":"1053:15:10"},"id":2501,"nodeType":"InheritanceSpecifier","src":"1053:15:10"},{"baseName":{"id":2502,"name":"ReentrancyGuardUpgradeable","nameLocations":["1074:26:10"],"nodeType":"IdentifierPath","referencedDeclaration":45022,"src":"1074:26:10"},"id":2503,"nodeType":"InheritanceSpecifier","src":"1074:26:10"},{"baseName":{"id":2504,"name":"PausableUpgradeable","nameLocations":["1106:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":44893,"src":"1106:19:10"},"id":2505,"nodeType":"InheritanceSpecifier","src":"1106:19:10"}],"canonicalName":"GatewayZEVM","contractDependencies":[],"contractKind":"contract","documentation":{"id":2493,"nodeType":"StructuredDocumentation","src":"758:200:10","text":"@title GatewayZEVM\n @notice The GatewayZEVM contract is the endpoint to call smart contracts on omnichain.\n @dev The contract doesn't hold any funds and should never have active allowances."},"fullyImplemented":true,"linearizedBaseContracts":[3462,44893,45022,44671,45620,44235,45062,48334,45441,44717,44489,4578,4386,4424],"name":"GatewayZEVM","nameLocation":"967:11:10","scope":3463,"usedErrors":[2508,4390,4393,4396,4399,4402,4405,4408,4411,4414,4417,4420,4423,44252,44255,44516,44521,44756,44759,44924,45368,45371,45830,45843,47477,47480],"usedEvents":[4361,4385,44260,44748,44753,45380,45389,45398,45809]}],"license":"MIT"},"id":10} \ No newline at end of file diff --git a/packages/client/src/abi/ZRC20.sol/ZRC20.json b/packages/client/src/abi/ZRC20.sol/ZRC20.json new file mode 100644 index 00000000..50900b98 --- /dev/null +++ b/packages/client/src/abi/ZRC20.sol/ZRC20.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"decimals_","type":"uint8","internalType":"uint8"},{"name":"chainid_","type":"uint256","internalType":"uint256"},{"name":"coinType_","type":"uint8","internalType":"enum CoinType"},{"name":"gasLimit_","type":"uint256","internalType":"uint256"},{"name":"systemContractAddress_","type":"address","internalType":"address"},{"name":"gatewayAddress_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"CHAIN_ID","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"COIN_TYPE","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum CoinType"}],"stateMutability":"view"},{"type":"function","name":"FUNGIBLE_MODULE_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"GAS_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"PROTOCOL_FLAT_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"SYSTEM_CONTRACT_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"gatewayAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"setName","inputs":[{"name":"newName","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSymbol","inputs":[{"name":"newSymbol","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateGasLimit","inputs":[{"name":"gasLimit_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateGatewayAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateProtocolFlatFee","inputs":[{"name":"protocolFlatFee_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateSystemContractAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"to","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawGasFee","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"withdrawGasFeeWithGasLimit","inputs":[{"name":"gasLimit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"name":"from","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UpdatedGasLimit","inputs":[{"name":"gasLimit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UpdatedGateway","inputs":[{"name":"gateway","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UpdatedProtocolFlatFee","inputs":[{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UpdatedSystemContract","inputs":[{"name":"systemContract","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawal","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"gasFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFlatFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InvalidSender","inputs":[]},{"type":"error","name":"LowAllowance","inputs":[]},{"type":"error","name":"LowBalance","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroGasCoin","inputs":[]},{"type":"error","name":"ZeroGasPrice","inputs":[]}],"bytecode":{"object":"0x60c060405234801561001057600080fd5b506040516120a63803806120a683398101604081905261002f91610224565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b6001600160a01b038216158061008057506001600160a01b038116155b1561009e5760405163d92e233d60e01b815260040160405180910390fd5b60066100aa8982610376565b5060076100b78882610376565b506008805460ff191660ff881617905560808590528360028111156100de576100de610434565b60a08160028111156100f2576100f2610434565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b03199091161790555061044a9350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261016757600080fd5b81516001600160401b0381111561018057610180610140565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101ae576101ae610140565b6040528181528382016020018510156101c657600080fd5b60005b828110156101e5576020818601810151838301820152016101c9565b506000918101602001919091529392505050565b80516003811061020857600080fd5b919050565b80516001600160a01b038116811461020857600080fd5b600080600080600080600080610100898b03121561024157600080fd5b88516001600160401b0381111561025757600080fd5b6102638b828c01610156565b60208b015190995090506001600160401b0381111561028157600080fd5b61028d8b828c01610156565b975050604089015160ff811681146102a457600080fd5b60608a015190965094506102ba60808a016101f9565b60a08a015190945092506102d060c08a0161020d565b91506102de60e08a0161020d565b90509295985092959890939650565b600181811c9082168061030157607f821691505b60208210810361032157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561037157806000526020600020601f840160051c8101602085101561034e5750805b601f840160051c820191505b8181101561036e576000815560010161035a565b50505b505050565b81516001600160401b0381111561038f5761038f610140565b6103a38161039d84546102ed565b84610327565b6020601f8211600181146103d757600083156103bf5750848201515b600019600385901b1c1916600184901b17845561036e565b600084815260208120601f198516915b8281101561040757878501518255602094850194600190920191016103e7565b50848210156104255786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61048b60003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea26469706673582212206ca0b4ba92c818c2268a96a059d56787769a64b137c4c1fa704309dae852329a64736f6c634300081a0033","sourceMap":"704:11440:11:-:0;;;2380:728;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2651:10;905:42;2651:37;2647:77;;2697:27;;-1:-1:-1;;;2697:27:11;;;;;;;;;;;2647:77;-1:-1:-1;;;;;2738:36:11;;;;:69;;-1:-1:-1;;;;;;2778:29:11;;;2738:69;2734:95;;;2816:13;;-1:-1:-1;;;2816:13:11;;;;;;;;;;;2734:95;2839:5;:13;2847:5;2839;:13;:::i;:::-;-1:-1:-1;2862:7:11;:17;2872:7;2862;:17;:::i;:::-;-1:-1:-1;2889:9:11;:21;;-1:-1:-1;;2889:21:11;;;;;;;2920:19;;;;2961:9;2949:21;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2980:9:11;:21;;;;3011:23;:48;;-1:-1:-1;;;;;3011:48:11;;;-1:-1:-1;;;;;;3011:48:11;;;;;;3069:14;:32;;;;;;3011:48;3069:32;-1:-1:-1;;;;;;3069:32:11;;;;;;-1:-1:-1;704:11440:11;;-1:-1:-1;;;;704:11440:11;14:127:108;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:834;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;298:13;;-1:-1:-1;;;;;323:30:108;;320:56;;;356:18;;:::i;:::-;405:2;399:9;497:2;459:17;;-1:-1:-1;;455:31:108;;;488:2;451:40;447:54;435:67;;-1:-1:-1;;;;;517:34:108;;553:22;;;514:62;511:88;;;579:18;;:::i;:::-;615:2;608:22;639;;;680:19;;;701:4;676:30;673:39;-1:-1:-1;670:59:108;;;725:1;722;715:12;670:59;747:1;757:143;771:6;768:1;765:13;757:143;;;883:4;867:14;;;863:25;;857:32;834:14;;;830:25;;823:67;786:12;757:143;;;-1:-1:-1;948:1:108;920:19;;;941:4;916:30;909:41;;;;924:6;146:834;-1:-1:-1;;;146:834:108:o;985:153::-;1070:13;;1112:1;1102:12;;1092:40;;1128:1;1125;1118:12;1092:40;985:153;;;:::o;1143:177::-;1222:13;;-1:-1:-1;;;;;1264:31:108;;1254:42;;1244:70;;1310:1;1307;1300:12;1325:1212;1489:6;1497;1505;1513;1521;1529;1537;1545;1598:3;1586:9;1577:7;1573:23;1569:33;1566:53;;;1615:1;1612;1605:12;1566:53;1642:16;;-1:-1:-1;;;;;1670:30:108;;1667:50;;;1713:1;1710;1703:12;1667:50;1736:61;1789:7;1780:6;1769:9;1765:22;1736:61;:::i;:::-;1843:2;1828:18;;1822:25;1726:71;;-1:-1:-1;1822:25:108;-1:-1:-1;;;;;;1859:32:108;;1856:52;;;1904:1;1901;1894:12;1856:52;1927:63;1982:7;1971:8;1960:9;1956:24;1927:63;:::i;:::-;1917:73;;;2033:2;2022:9;2018:18;2012:25;2077:4;2070:5;2066:16;2059:5;2056:27;2046:55;;2097:1;2094;2087:12;2046:55;2191:2;2176:18;;2170:25;2120:5;;-1:-1:-1;2170:25:108;-1:-1:-1;2240:56:108;2291:3;2276:19;;2240:56;:::i;:::-;2362:3;2347:19;;2341:26;2230:66;;-1:-1:-1;2341:26:108;-1:-1:-1;2412:50:108;2457:3;2442:19;;2412:50;:::i;:::-;2402:60;;2481:50;2526:3;2515:9;2511:19;2481:50;:::i;:::-;2471:60;;1325:1212;;;;;;;;;;;:::o;2542:380::-;2621:1;2617:12;;;;2664;;;2685:61;;2739:4;2731:6;2727:17;2717:27;;2685:61;2792:2;2784:6;2781:14;2761:18;2758:38;2755:161;;2838:10;2833:3;2829:20;2826:1;2819:31;2873:4;2870:1;2863:15;2901:4;2898:1;2891:15;2755:161;;2542:380;;;:::o;3053:518::-;3155:2;3150:3;3147:11;3144:421;;;3191:5;3188:1;3181:16;3235:4;3232:1;3222:18;3305:2;3293:10;3289:19;3286:1;3282:27;3276:4;3272:38;3341:4;3329:10;3326:20;3323:47;;;-1:-1:-1;3364:4:108;3323:47;3419:2;3414:3;3410:12;3407:1;3403:20;3397:4;3393:31;3383:41;;3474:81;3492:2;3485:5;3482:13;3474:81;;;3551:1;3537:16;;3518:1;3507:13;3474:81;;;3478:3;;3144:421;3053:518;;;:::o;3747:1299::-;3867:10;;-1:-1:-1;;;;;3889:30:108;;3886:56;;;3922:18;;:::i;:::-;3951:97;4041:6;4001:38;4033:4;4027:11;4001:38;:::i;:::-;3995:4;3951:97;:::i;:::-;4097:4;4128:2;4117:14;;4145:1;4140:649;;;;4833:1;4850:6;4847:89;;;-1:-1:-1;4902:19:108;;;4896:26;4847:89;-1:-1:-1;;3704:1:108;3700:11;;;3696:24;3692:29;3682:40;3728:1;3724:11;;;3679:57;4949:81;;4110:930;;4140:649;3000:1;2993:14;;;3037:4;3024:18;;-1:-1:-1;;4176:20:108;;;4294:222;4308:7;4305:1;4302:14;4294:222;;;4390:19;;;4384:26;4369:42;;4497:4;4482:20;;;;4450:1;4438:14;;;;4324:12;4294:222;;;4298:3;4544:6;4535:7;4532:19;4529:201;;;4605:19;;;4599:26;-1:-1:-1;;4688:1:108;4684:14;;;4700:3;4680:24;4676:37;4672:42;4657:58;4642:74;;4529:201;-1:-1:-1;;;;4776:1:108;4760:14;;;4756:22;4743:36;;-1:-1:-1;3747:1299:108:o;5051:127::-;5112:10;5107:3;5103:20;5100:1;5093:31;5143:4;5140:1;5133:15;5167:4;5164:1;5157:15;5051:127;704:11440:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea26469706673582212206ca0b4ba92c818c2268a96a059d56787769a64b137c4c1fa704309dae852329a64736f6c634300081a0033","sourceMap":"704:11440:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1384:24;;;;;;;;;849:25:108;;;837:2;822:18;1384:24:11;703:177:108;5417:166:11;;;;;;:::i;:::-;;:::i;:::-;;;1581:14:108;;1574:22;1556:41;;1544:2;1529:18;5417:166:11;1416:187:108;4130:106:11;4217:12;;4130:106;;5831:388;;;;;;:::i;:::-;;:::i;3933:98::-;4015:9;;3933:98;;4015:9;;;;2263:36:108;;2251:2;2236:18;3933:98:11;2121:184:108;855:92:11;;905:42;855:92;;;;;2486:42:108;2474:55;;;2456:74;;2444:2;2429:18;855:92:11;2310:226:108;6365:126:11;;;;;;:::i;:::-;;:::i;8150:396::-;;;;;;:::i;:::-;;:::i;1528:41::-;;;;;;4418:125;;;;;;:::i;:::-;4518:18;;4492:7;4518:18;;;:9;:18;;;;;;;4418:125;982:33;;;;;1958:29;;;;;;;;;;;;3742:102;;;:::i;1073:35::-;;;;;;;;;;;;:::i;4741:172::-;;;;;;:::i;:::-;;:::i;3550:111::-;;;;;;:::i;:::-;;:::i;:::-;;3363:103;;;;;;:::i;:::-;;:::i;10352:430::-;;;;;;:::i;:::-;;:::i;10942:216::-;;;;;;:::i;:::-;;:::i;11320:193::-;;;;;;:::i;:::-;;:::i;8731:498::-;;;:::i;:::-;;;;5688:42:108;5676:55;;;5658:74;;5763:2;5748:18;;5741:34;;;;5631:18;8731:498:11;5484:297:108;5064:149:11;;;;;;:::i;:::-;5179:18;;;;5153:7;5179:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5064:149;11954:188;;;;;;:::i;:::-;;:::i;1234:38::-;;;;;;;;;11650:144;;;;;;:::i;:::-;;:::i;9437:525::-;;;;;;:::i;:::-;;:::i;3183:98::-;3237:13;3269:5;3262:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3183:98;:::o;5417:166::-;5500:4;5516:39;2073:10;5539:7;5548:6;5516:8;:39::i;:::-;-1:-1:-1;5572:4:11;5417:166;;;;;:::o;5831:388::-;5937:4;5953:36;5963:6;5971:9;5982:6;5953:9;:36::i;:::-;6027:19;;;6000:24;6027:19;;;:11;:19;;;;;;;;2073:10;6027:33;;;;;;;;6074:25;;;6070:52;;;6108:14;;;;;;;;;;;;;;6070:52;6133:57;6142:6;2073:10;6164:25;6183:6;6164:16;:25;:::i;:::-;6133:8;:57::i;:::-;-1:-1:-1;6208:4:11;;5831:388;-1:-1:-1;;;;5831:388:11:o;6365:126::-;6422:4;6438:25;6444:10;6456:6;6438:5;:25::i;:::-;-1:-1:-1;6480:4:11;;6365:126;-1:-1:-1;6365:126:11:o;8150:396::-;8222:4;8255:10;905:42;8255:37;;;;:78;;-1:-1:-1;8310:23:11;;;;8296:10;:37;;8255:78;:126;;;;-1:-1:-1;8367:14:11;;;;;;;8353:10;:28;;8255:126;8238:176;;;8399:15;;;;;;;;;;;;;;8238:176;8424:17;8430:2;8434:6;8424:5;:17::i;:::-;8464:41;;7088:15:108;8464:41:11;;;7072:101:108;8456:62:11;;;;;;7189:12:108;;8464:41:11;;;;;;;;;;;;;;8456:62;;8511:6;;8456:62;:::i;:::-;;;;;;;;-1:-1:-1;8535:4:11;8150:396;;;;:::o;3742:102::-;3798:13;3830:7;3823:14;;;;;:::i;4741:172::-;4827:4;4843:42;2073:10;4867:9;4878:6;4843:9;:42::i;3550:111::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;3635:7:::1;:19;3645:9:::0;3635:7;:19:::1;:::i;:::-;;3550:111:::0;:::o;3363:103::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;3444:5:::1;:15;3452:7:::0;3444:5;:15:::1;:::i;10352:430::-:0;10430:4;10447:16;10465:14;10483:16;:14;:16::i;:::-;10514:74;;;;;10544:10;10514:74;;;10011::108;905:42:11;10101:18:108;;;10094:83;10193:18;;;10186:34;;;10446:53:11;;-1:-1:-1;10446:53:11;-1:-1:-1;10514:29:11;;;;;;9984:18:108;;10514:74:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10509:135;;10611:22;;;;;;;;;;;;;;10509:135;10653:25;10659:10;10671:6;10653:5;:25::i;:::-;10736:17;;10693:61;;10704:10;;10693:61;;;;10716:2;;10720:6;;10728;;10693:61;:::i;:::-;;;;;;;;-1:-1:-1;10771:4:11;;10352:430;-1:-1:-1;;;;10352:430:11:o;10942:216::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;11029:18:::1;::::0;::::1;11025:44;;11056:13;;;;;;;;;;;;;;11025:44;11079:23;:30:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;11124:27:::1;::::0;2456:74:108;;;11124:27:11::1;::::0;2444:2:108;2429:18;11124:27:11::1;;;;;;;;10942:216:::0;:::o;11320:193::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;11400:18:::1;::::0;::::1;11396:44;;11427:13;;;;;;;;;;;;;;11396:44;11450:14;:21:::0;;;::::1;;;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;11486:20:::1;::::0;2456:74:108;;;11486:20:11::1;::::0;2444:2:108;2429:18;11486:20:11::1;2310:226:108::0;8731:498:11;8787:7;8842:23;;8834:64;;;;;8889:8;8834:64;;;849:25:108;8787:7:11;;;;8842:23;;;;;8834:54;;822:18:108;;8834:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8815:83;-1:-1:-1;8912:22:11;;;8908:48;;8943:13;;;;;;;;;;;;;;8908:48;8967:16;8994:23;;8986:60;;;;;9037:8;8986:60;;;849:25:108;8994:23:11;;;;;8986:50;;822:18:108;;8986:60:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8967:79;;9060:8;9072:1;9060:13;9056:65;;9096:14;;;;;;;;;;;;;;9056:65;9130:14;9170:17;;9158:9;;9147:8;:20;;;;:::i;:::-;:40;;;;:::i;:::-;9205:8;;9130:57;;-1:-1:-1;8731:498:11;;-1:-1:-1;;;8731:498:11:o;11954:188::-;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;12043:17:::1;:36:::0;;;12094:41:::1;::::0;849:25:108;;;12094:41:11::1;::::0;837:2:108;822:18;12094:41:11::1;703:177:108::0;11650:144:11;2193:10;905:42;2193:37;2189:77;;2239:27;;;;;;;;;;;;;;2189:77;11725:9:::1;:21:::0;;;11761:26:::1;::::0;849:25:108;;;11761:26:11::1;::::0;837:2:108;822:18;11761:26:11::1;703:177:108::0;9437:525:11;9521:7;9576:23;;9568:64;;;;;9623:8;9568:64;;;849:25:108;9521:7:11;;;;9576:23;;;;;9568:54;;822:18:108;;9568:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9549:83;-1:-1:-1;9646:22:11;;;9642:48;;9677:13;;;;;;;;;;;;;;9642:48;9701:16;9728:23;;9720:60;;;;;9771:8;9720:60;;;849:25:108;9728:23:11;;;;;9720:50;;822:18:108;;9720:60:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9701:79;;9794:8;9806:1;9794:13;9790:65;;9830:14;;;;;;;;;;;;;;9790:65;9903:17;;9864:14;;9881:19;9892:8;9881;:19;:::i;:::-;:39;;;;:::i;:::-;9938:8;;9864:56;;-1:-1:-1;9437:525:11;;-1:-1:-1;;;;9437:525:11:o;7610:296::-;7707:19;;;7703:45;;7735:13;;;;;;;;;;;;;;7703:45;7762:21;;;7758:47;;7792:13;;;;;;;;;;;;;;7758:47;7816:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7867:32;;849:25:108;;;7867:32:11;;822:18:108;7867:32:11;;;;;;;;7610:296;;;:::o;6497:462::-;6598:20;;;6594:46;;6627:13;;;;;;;;;;;;;;6594:46;6654:23;;;6650:49;;6686:13;;;;;;;;;;;;;;6650:49;6734:17;;;6710:21;6734:17;;;:9;:17;;;;;;6765:22;;;6761:47;;;6796:12;;;;;;;;;;;;;;6761:47;6839:22;6855:6;6839:13;:22;:::i;:::-;6819:17;;;;;;;;:9;:17;;;;;;:42;;;;6871:20;;;;;;;;:30;;6895:6;;6819:17;6871:30;;6895:6;;6871:30;:::i;:::-;;;;;;;;6934:9;6917:35;;6926:6;6917:35;;;6945:6;6917:35;;;;849:25:108;;837:2;822:18;;703:177;6917:35:11;;;;;;;;6584:375;6497:462;;;:::o;7223:381::-;7302:21;;;7298:47;;7332:13;;;;;;;;;;;;;;7298:47;7381:18;;;7356:22;7381:18;;;:9;:18;;;;;;7413:23;;;7409:48;;;7445:12;;;;;;;;;;;;;;7409:48;7489:23;7506:6;7489:14;:23;:::i;:::-;7468:18;;;;;;;:9;:18;;;;;:44;;;;7522:12;:22;;7538:6;;7468:18;7522:22;;7538:6;;7522:22;:::i;:::-;;;;-1:-1:-1;;7560:37:11;;849:25:108;;;7586:1:11;;7560:37;;;;;;837:2:108;822:18;7560:37:11;703:177:108;6965:252:11;7044:21;;;7040:47;;7074:13;;;;;;;;;;;;;;7040:47;7114:6;7098:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;7130:18:11;;;;;;;:9;:18;;;;;:28;;7152:6;;7130:18;:28;;7152:6;;7130:28;:::i;:::-;;;;-1:-1:-1;;7173:37:11;;849:25:108;;;7173:37:11;;;;7190:1;;7173:37;;837:2:108;822:18;7173:37:11;;;;;;;6965:252;;:::o;14:459:108:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:139;170:6;167:1;164:13;156:139;;;278:4;263:13;;;259:24;;253:31;233:11;;;229:22;;222:63;185:12;156:139;;;160:3;340:1;333:4;324:6;319:3;315:16;311:27;304:38;462:4;392:66;387:2;379:6;375:15;371:88;366:3;362:98;358:109;351:116;;;14:459;;;;:::o;478:220::-;627:2;616:9;609:21;590:4;647:45;688:2;677:9;673:18;665:6;647:45;:::i;:::-;639:53;478:220;-1:-1:-1;;;478:220:108:o;885:154::-;971:42;964:5;960:54;953:5;950:65;940:93;;1029:1;1026;1019:12;940:93;885:154;:::o;1044:367::-;1112:6;1120;1173:2;1161:9;1152:7;1148:23;1144:32;1141:52;;;1189:1;1186;1179:12;1141:52;1228:9;1215:23;1247:31;1272:5;1247:31;:::i;:::-;1297:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1044:367:108:o;1608:508::-;1685:6;1693;1701;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;:::-;1878:5;-1:-1:-1;1935:2:108;1920:18;;1907:32;1948:33;1907:32;1948:33;:::i;:::-;1608:508;;2000:7;;-1:-1:-1;;;2080:2:108;2065:18;;;;2052:32;;1608:508::o;2541:226::-;2600:6;2653:2;2641:9;2632:7;2628:23;2624:32;2621:52;;;2669:1;2666;2659:12;2621:52;-1:-1:-1;2714:23:108;;2541:226;-1:-1:-1;2541:226:108:o;2772:247::-;2831:6;2884:2;2872:9;2863:7;2859:23;2855:32;2852:52;;;2900:1;2897;2890:12;2852:52;2939:9;2926:23;2958:31;2983:5;2958:31;:::i;3024:398::-;3169:2;3154:18;;3202:1;3191:13;;3181:201;;3238:77;3235:1;3228:88;3339:4;3336:1;3329:15;3367:4;3364:1;3357:15;3181:201;3391:25;;;3024:398;:::o;3427:184::-;3479:77;3476:1;3469:88;3576:4;3573:1;3566:15;3600:4;3597:1;3590:15;3616:834;3681:5;3713:1;3737:18;3729:6;3726:30;3723:56;;;3759:18;;:::i;:::-;-1:-1:-1;3973:2:108;3967:9;3823:66;3818:2;3806:15;;3802:88;;4031:2;4019:15;4015:88;4003:101;;4155:22;;;4134:18;4119:34;;4116:62;4113:88;;;4181:18;;:::i;:::-;4217:2;4210:22;4265;;;4250:6;-1:-1:-1;4250:6:108;4302:16;;;4299:25;-1:-1:-1;4296:45:108;;;4337:1;4334;4327:12;4296:45;4387:6;4382:3;4375:4;4367:6;4363:17;4350:44;4442:1;4435:4;4426:6;4418;4414:19;4410:30;4403:41;;3616:834;;;;;:::o;4455:451::-;4524:6;4577:2;4565:9;4556:7;4552:23;4548:32;4545:52;;;4593:1;4590;4583:12;4545:52;4633:9;4620:23;4666:18;4658:6;4655:30;4652:50;;;4698:1;4695;4688:12;4652:50;4721:22;;4774:4;4766:13;;4762:27;-1:-1:-1;4752:55:108;;4803:1;4800;4793:12;4752:55;4826:74;4892:7;4887:2;4874:16;4869:2;4865;4861:11;4826:74;:::i;:::-;4816:84;4455:451;-1:-1:-1;;;;4455:451:108:o;4911:568::-;4988:6;4996;5049:2;5037:9;5028:7;5024:23;5020:32;5017:52;;;5065:1;5062;5055:12;5017:52;5105:9;5092:23;5138:18;5130:6;5127:30;5124:50;;;5170:1;5167;5160:12;5124:50;5193:22;;5246:4;5238:13;;5234:27;-1:-1:-1;5224:55:108;;5275:1;5272;5265:12;5224:55;5298:76;5366:7;5361:2;5348:16;5341:4;5337:2;5333:13;5298:76;:::i;:::-;5288:86;5443:4;5428:20;;;;5415:34;;-1:-1:-1;;;;4911:568:108:o;5786:388::-;5854:6;5862;5915:2;5903:9;5894:7;5890:23;5886:32;5883:52;;;5931:1;5928;5921:12;5883:52;5970:9;5957:23;5989:31;6014:5;5989:31;:::i;:::-;6039:5;-1:-1:-1;6096:2:108;6081:18;;6068:32;6109:33;6068:32;6109:33;:::i;:::-;6161:7;6151:17;;;5786:388;;;;;:::o;6179:437::-;6258:1;6254:12;;;;6301;;;6322:61;;6376:4;6368:6;6364:17;6354:27;;6322:61;6429:2;6421:6;6418:14;6398:18;6395:38;6392:218;;6466:77;6463:1;6456:88;6567:4;6564:1;6557:15;6595:4;6592:1;6585:15;6392:218;;6179:437;;;:::o;6621:184::-;6673:77;6670:1;6663:88;6770:4;6767:1;6760:15;6794:4;6791:1;6784:15;6810:128;6877:9;;;6898:11;;;6895:37;;;6912:18;;:::i;7212:289::-;7387:2;7376:9;7369:21;7350:4;7407:45;7448:2;7437:9;7433:18;7425:6;7407:45;:::i;:::-;7399:53;;7488:6;7483:2;7472:9;7468:18;7461:34;7212:289;;;;;:::o;7632:518::-;7734:2;7729:3;7726:11;7723:421;;;7770:5;7767:1;7760:16;7814:4;7811:1;7801:18;7884:2;7872:10;7868:19;7865:1;7861:27;7855:4;7851:38;7920:4;7908:10;7905:20;7902:47;;;-1:-1:-1;7943:4:108;7902:47;7998:2;7993:3;7989:12;7986:1;7982:20;7976:4;7972:31;7962:41;;8053:81;8071:2;8064:5;8061:13;8053:81;;;8130:1;8116:16;;8097:1;8086:13;8053:81;;;8057:3;;7723:421;7632:518;;;:::o;8386:1418::-;8512:3;8506:10;8539:18;8531:6;8528:30;8525:56;;;8561:18;;:::i;:::-;8590:97;8680:6;8640:38;8672:4;8666:11;8640:38;:::i;:::-;8634:4;8590:97;:::i;:::-;8736:4;8767:2;8756:14;;8784:1;8779:768;;;;9591:1;9608:6;9605:89;;;-1:-1:-1;9660:19:108;;;9654:26;9605:89;8292:66;8283:1;8279:11;;;8275:84;8271:89;8261:100;8367:1;8363:11;;;8258:117;9707:81;;8749:1049;;8779:768;7579:1;7572:14;;;7616:4;7603:18;;8827:66;8815:79;;;8992:222;9006:7;9003:1;9000:14;8992:222;;;9088:19;;;9082:26;9067:42;;9195:4;9180:20;;;;9148:1;9136:14;;;;9022:12;8992:222;;;8996:3;9242:6;9233:7;9230:19;9227:261;;;9303:19;;;9297:26;9404:66;9386:1;9382:14;;;9398:3;9378:24;9374:97;9370:102;9355:118;9340:134;;9227:261;-1:-1:-1;;;;9534:1:108;9518:14;;;9514:22;9501:36;;-1:-1:-1;8386:1418:108:o;10231:277::-;10298:6;10351:2;10339:9;10330:7;10326:23;10322:32;10319:52;;;10367:1;10364;10357:12;10319:52;10399:9;10393:16;10452:5;10445:13;10438:21;10431:5;10428:32;10418:60;;10474:1;10471;10464:12;10513:433;10744:3;10733:9;10726:22;10707:4;10765:46;10806:3;10795:9;10791:19;10783:6;10765:46;:::i;:::-;10842:2;10827:18;;10820:34;;;;-1:-1:-1;10885:2:108;10870:18;;10863:34;;;;10928:2;10913:18;;;10906:34;10757:54;10513:433;-1:-1:-1;10513:433:108:o;10951:251::-;11021:6;11074:2;11062:9;11053:7;11049:23;11045:32;11042:52;;;11090:1;11087;11080:12;11042:52;11122:9;11116:16;11141:31;11166:5;11141:31;:::i;11207:184::-;11277:6;11330:2;11318:9;11309:7;11305:23;11301:32;11298:52;;;11346:1;11343;11336:12;11298:52;-1:-1:-1;11369:16:108;;11207:184;-1:-1:-1;11207:184:108:o;11396:168::-;11469:9;;;11500;;11517:15;;;11511:22;;11497:37;11487:71;;11538:18;;:::i;11569:125::-;11634:9;;;11655:10;;;11652:36;;;11668:18;;:::i","linkReferences":{},"immutableReferences":{"3497":[{"start":752,"length":32},{"start":3036,"length":32},{"start":3298,"length":32},{"start":3838,"length":32},{"start":4100,"length":32}],"3501":[{"start":836,"length":32}]}},"methodIdentifiers":{"CHAIN_ID()":"85e1f4d0","COIN_TYPE()":"a3413d03","FUNGIBLE_MODULE_ADDRESS()":"3ce4a5bc","GAS_LIMIT()":"091d2788","PROTOCOL_FLAT_FEE()":"4d8943bb","SYSTEM_CONTRACT_ADDRESS()":"f2441b32","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","decimals()":"313ce567","deposit(address,uint256)":"47e7ef24","gatewayAddress()":"8b851b95","name()":"06fdde03","setName(string)":"c47f0027","setSymbol(string)":"b84c8246","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","updateGasLimit(uint256)":"f687d12a","updateGatewayAddress(address)":"ccc77599","updateProtocolFlatFee(uint256)":"eddeb123","updateSystemContractAddress(address)":"c835d7cc","withdraw(bytes,uint256)":"c7012626","withdrawGasFee()":"d9eeebed","withdrawGasFeeWithGasLimit(uint256)":"fc5fecd5"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"chainid_\",\"type\":\"uint256\"},{\"internalType\":\"enum CoinType\",\"name\":\"coinType_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"systemContractAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gatewayAddress_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasCoin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasPrice\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"from\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"gateway\",\"type\":\"address\"}],\"name\":\"UpdatedGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedProtocolFlatFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"systemContract\",\"type\":\"address\"}],\"name\":\"UpdatedSystemContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COIN_TYPE\",\"outputs\":[{\"internalType\":\"enum CoinType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROTOCOL_FLAT_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONTRACT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gatewayAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newSymbol\",\"type\":\"string\"}],\"name\":\"setSymbol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit_\",\"type\":\"uint256\"}],\"name\":\"updateGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"updateGatewayAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFlatFee_\",\"type\":\"uint256\"}],\"name\":\"updateProtocolFlatFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"updateSystemContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawGasFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"withdrawGasFeeWithGasLimit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns token allowance from owner to spender.\",\"params\":{\"owner\":\", owner address.\"},\"returns\":{\"_0\":\"uint256 allowance.\"}},\"approve(address,uint256)\":{\"details\":\"Approves amount transferFrom for spender.\",\"params\":{\"amount\":\", amount to approve.\",\"spender\":\", spender address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"balanceOf(address)\":{\"details\":\"Returns ZRC20 balance of an account.\",\"params\":{\"account\":\", account address for which balance is requested.\"},\"returns\":{\"_0\":\"uint256 account balance.\"}},\"burn(uint256)\":{\"details\":\"Burns an amount of tokens.\",\"params\":{\"amount\":\", amount to burn.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"constructor\":{\"details\":\"The only one allowed to deploy new ZRC20 is fungible address.\"},\"decimals()\":{\"details\":\"ZRC20 decimals.\",\"returns\":{\"_0\":\"returns uint8 decimals.\"}},\"deposit(address,uint256)\":{\"details\":\"Deposits corresponding tokens from external chain, only callable by Fungible module.\",\"params\":{\"amount\":\", amount to deposit.\",\"to\":\", recipient address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"name()\":{\"details\":\"ZRC20 name\",\"returns\":{\"_0\":\"name as string\"}},\"setName(string)\":{\"details\":\"Name can be updated by fungible module account.\"},\"setSymbol(string)\":{\"details\":\"Symbol can be updated by fungible module account.\"},\"symbol()\":{\"details\":\"ZRC20 symbol.\",\"returns\":{\"_0\":\"symbol as string.\"}},\"totalSupply()\":{\"details\":\"ZRC20 total supply.\",\"returns\":{\"_0\":\"returns uint256 total supply.\"}},\"transfer(address,uint256)\":{\"details\":\"Returns ZRC20 balance of an account.\",\"params\":{\"recipient\":\", recipiuent address to which transfer is done.\"},\"returns\":{\"_0\":\"true/false if transfer succeeded/failed.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers tokens from sender to recipient.\",\"params\":{\"amount\":\", amount to transfer.\",\"recipient\":\", recipient address.\",\"sender\":\", sender address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"updateGasLimit(uint256)\":{\"details\":\"Updates gas limit. Can only be updated by the fungible module.\",\"params\":{\"gasLimit_\":\", new gas limit.\"}},\"updateGatewayAddress(address)\":{\"details\":\"Updates gateway contract address. Can only be updated by the fungible module.\",\"params\":{\"addr\":\", new gateway contract address.\"}},\"updateProtocolFlatFee(uint256)\":{\"details\":\"Updates protocol flat fee. Can only be updated by the fungible module.\",\"params\":{\"protocolFlatFee_\":\", new protocol flat fee.\"}},\"updateSystemContractAddress(address)\":{\"details\":\"Updates system contract address. Can only be updated by the fungible module.\",\"params\":{\"addr\":\", new system contract address.\"}},\"withdraw(bytes,uint256)\":{\"details\":\"Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the outbound chain this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.\",\"params\":{\"amount\":\", amount to deposit.\",\"to\":\", recipient address.\"},\"returns\":{\"_0\":\"true/false if succeeded/failed.\"}},\"withdrawGasFee()\":{\"details\":\"Withdraws gas fees.\",\"returns\":{\"_0\":\"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()\"}},\"withdrawGasFeeWithGasLimit(uint256)\":{\"details\":\"Withdraws gas fees with specified gasLimit\",\"returns\":{\"_0\":\"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()\"}}},\"stateVariables\":{\"GAS_LIMIT\":{\"details\":\"Name is in upper case to maintain compatibility with ZRC20.sol v1\"},\"PROTOCOL_FLAT_FEE\":{\"details\":\"Name is in upper case to maintain compatibility with ZRC20.sol v1\"},\"SYSTEM_CONTRACT_ADDRESS\":{\"details\":\"Name is in upper case to maintain compatibility with ZRC20.sol v1\"},\"gatewayAddress\":{\"details\":\"This variable is added at last position to maintain storage layout with ZRC20.sol v1\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"CHAIN_ID()\":{\"notice\":\"Chain id.abi\"},\"COIN_TYPE()\":{\"notice\":\"Coin type, checkout Interfaces.sol.\"},\"FUNGIBLE_MODULE_ADDRESS()\":{\"notice\":\"Fungible address is always the same, maintained at the protocol level\"},\"GAS_LIMIT()\":{\"notice\":\"Gas limit.\"},\"PROTOCOL_FLAT_FEE()\":{\"notice\":\"Protocol flat fee.\"},\"SYSTEM_CONTRACT_ADDRESS()\":{\"notice\":\"System contract address.\"},\"gatewayAddress()\":{\"notice\":\"Gateway contract address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/ZRC20.sol\":\"ZRC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/zevm/ZRC20.sol\":{\"keccak256\":\"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e\",\"dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi\"]},\"contracts/zevm/interfaces/ISystem.sol\":{\"keccak256\":\"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d\",\"dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"chainid_","type":"uint256"},{"internalType":"enum CoinType","name":"coinType_","type":"uint8"},{"internalType":"uint256","name":"gasLimit_","type":"uint256"},{"internalType":"address","name":"systemContractAddress_","type":"address"},{"internalType":"address","name":"gatewayAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InvalidSender"},{"inputs":[],"type":"error","name":"LowAllowance"},{"inputs":[],"type":"error","name":"LowBalance"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroGasCoin"},{"inputs":[],"type":"error","name":"ZeroGasPrice"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"bytes","name":"from","type":"bytes","indexed":false},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Deposit","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256","indexed":false}],"type":"event","name":"UpdatedGasLimit","anonymous":false},{"inputs":[{"internalType":"address","name":"gateway","type":"address","indexed":false}],"type":"event","name":"UpdatedGateway","anonymous":false},{"inputs":[{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false}],"type":"event","name":"UpdatedProtocolFlatFee","anonymous":false},{"inputs":[{"internalType":"address","name":"systemContract","type":"address","indexed":false}],"type":"event","name":"UpdatedSystemContract","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"bytes","name":"to","type":"bytes","indexed":false},{"internalType":"uint256","name":"value","type":"uint256","indexed":false},{"internalType":"uint256","name":"gasFee","type":"uint256","indexed":false},{"internalType":"uint256","name":"protocolFlatFee","type":"uint256","indexed":false}],"type":"event","name":"Withdrawal","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"COIN_TYPE","outputs":[{"internalType":"enum CoinType","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FUNGIBLE_MODULE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"GAS_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"PROTOCOL_FLAT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SYSTEM_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deposit","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"gatewayAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"newName","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setName"},{"inputs":[{"internalType":"string","name":"newSymbol","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setSymbol"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"gasLimit_","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updateGasLimit"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"updateGatewayAddress"},{"inputs":[{"internalType":"uint256","name":"protocolFlatFee_","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"updateProtocolFlatFee"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"updateSystemContractAddress"},{"inputs":[{"internalType":"bytes","name":"to","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"withdrawGasFee","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"gasLimit","type":"uint256"}],"stateMutability":"view","type":"function","name":"withdrawGasFeeWithGasLimit","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns token allowance from owner to spender.","params":{"owner":", owner address."},"returns":{"_0":"uint256 allowance."}},"approve(address,uint256)":{"details":"Approves amount transferFrom for spender.","params":{"amount":", amount to approve.","spender":", spender address."},"returns":{"_0":"true/false if succeeded/failed."}},"balanceOf(address)":{"details":"Returns ZRC20 balance of an account.","params":{"account":", account address for which balance is requested."},"returns":{"_0":"uint256 account balance."}},"burn(uint256)":{"details":"Burns an amount of tokens.","params":{"amount":", amount to burn."},"returns":{"_0":"true/false if succeeded/failed."}},"constructor":{"details":"The only one allowed to deploy new ZRC20 is fungible address."},"decimals()":{"details":"ZRC20 decimals.","returns":{"_0":"returns uint8 decimals."}},"deposit(address,uint256)":{"details":"Deposits corresponding tokens from external chain, only callable by Fungible module.","params":{"amount":", amount to deposit.","to":", recipient address."},"returns":{"_0":"true/false if succeeded/failed."}},"name()":{"details":"ZRC20 name","returns":{"_0":"name as string"}},"setName(string)":{"details":"Name can be updated by fungible module account."},"setSymbol(string)":{"details":"Symbol can be updated by fungible module account."},"symbol()":{"details":"ZRC20 symbol.","returns":{"_0":"symbol as string."}},"totalSupply()":{"details":"ZRC20 total supply.","returns":{"_0":"returns uint256 total supply."}},"transfer(address,uint256)":{"details":"Returns ZRC20 balance of an account.","params":{"recipient":", recipiuent address to which transfer is done."},"returns":{"_0":"true/false if transfer succeeded/failed."}},"transferFrom(address,address,uint256)":{"details":"Transfers tokens from sender to recipient.","params":{"amount":", amount to transfer.","recipient":", recipient address.","sender":", sender address."},"returns":{"_0":"true/false if succeeded/failed."}},"updateGasLimit(uint256)":{"details":"Updates gas limit. Can only be updated by the fungible module.","params":{"gasLimit_":", new gas limit."}},"updateGatewayAddress(address)":{"details":"Updates gateway contract address. Can only be updated by the fungible module.","params":{"addr":", new gateway contract address."}},"updateProtocolFlatFee(uint256)":{"details":"Updates protocol flat fee. Can only be updated by the fungible module.","params":{"protocolFlatFee_":", new protocol flat fee."}},"updateSystemContractAddress(address)":{"details":"Updates system contract address. Can only be updated by the fungible module.","params":{"addr":", new system contract address."}},"withdraw(bytes,uint256)":{"details":"Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the outbound chain this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.","params":{"amount":", amount to deposit.","to":", recipient address."},"returns":{"_0":"true/false if succeeded/failed."}},"withdrawGasFee()":{"details":"Withdraws gas fees.","returns":{"_0":"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()"}},"withdrawGasFeeWithGasLimit(uint256)":{"details":"Withdraws gas fees with specified gasLimit","returns":{"_0":"returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw()"}}},"version":1},"userdoc":{"kind":"user","methods":{"CHAIN_ID()":{"notice":"Chain id.abi"},"COIN_TYPE()":{"notice":"Coin type, checkout Interfaces.sol."},"FUNGIBLE_MODULE_ADDRESS()":{"notice":"Fungible address is always the same, maintained at the protocol level"},"GAS_LIMIT()":{"notice":"Gas limit."},"PROTOCOL_FLAT_FEE()":{"notice":"Protocol flat fee."},"SYSTEM_CONTRACT_ADDRESS()":{"notice":"System contract address."},"gatewayAddress()":{"notice":"Gateway contract address."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/ZRC20.sol":"ZRC20"},"evmVersion":"london","libraries":{}},"sources":{"contracts/zevm/ZRC20.sol":{"keccak256":"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc","urls":["bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e","dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi"],"license":"MIT"},"contracts/zevm/interfaces/ISystem.sol":{"keccak256":"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df","urls":["bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d","dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":3504,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"SYSTEM_CONTRACT_ADDRESS","offset":0,"slot":"0","type":"t_address"},{"astId":3507,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"GAS_LIMIT","offset":0,"slot":"1","type":"t_uint256"},{"astId":3511,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"PROTOCOL_FLAT_FEE","offset":0,"slot":"2","type":"t_uint256"},{"astId":3515,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_balances","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3521,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_allowances","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":3523,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_totalSupply","offset":0,"slot":"5","type":"t_uint256"},{"astId":3525,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_name","offset":0,"slot":"6","type":"t_string_storage"},{"astId":3527,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_symbol","offset":0,"slot":"7","type":"t_string_storage"},{"astId":3529,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"_decimals","offset":0,"slot":"8","type":"t_uint8"},{"astId":3532,"contract":"contracts/zevm/ZRC20.sol:ZRC20","label":"gatewayAddress","offset":1,"slot":"8","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"ast":{"absolutePath":"contracts/zevm/ZRC20.sol","id":4341,"exportedSymbols":{"CoinType":[4903],"ISystem":[4618],"IZRC20":[4825],"IZRC20Metadata":[4844],"ZRC20":[4340],"ZRC20Errors":[3484],"ZRC20Events":[4898]},"nodeType":"SourceUnit","src":"32:12113:11","nodes":[{"id":3464,"nodeType":"PragmaDirective","src":"32:23:11","nodes":[],"literals":["solidity","0.8",".26"]},{"id":3465,"nodeType":"ImportDirective","src":"57:53:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/ISystem.sol","file":"../../contracts/zevm/interfaces/ISystem.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4619,"symbolAliases":[],"unitAlias":""},{"id":3466,"nodeType":"ImportDirective","src":"111:52:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"../../contracts/zevm/interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4904,"symbolAliases":[],"unitAlias":""},{"id":3484,"nodeType":"ContractDefinition","src":"205:316:11","nodes":[{"id":3469,"nodeType":"ErrorDefinition","src":"298:34:11","nodes":[],"errorSelector":"2b2add3d","name":"CallerIsNotFungibleModule","nameLocation":"304:25:11","parameters":{"id":3468,"nodeType":"ParameterList","parameters":[],"src":"329:2:11"}},{"id":3471,"nodeType":"ErrorDefinition","src":"337:22:11","nodes":[],"errorSelector":"ddb5de5e","name":"InvalidSender","nameLocation":"343:13:11","parameters":{"id":3470,"nodeType":"ParameterList","parameters":[],"src":"356:2:11"}},{"id":3473,"nodeType":"ErrorDefinition","src":"364:29:11","nodes":[],"errorSelector":"0a7cd6d6","name":"GasFeeTransferFailed","nameLocation":"370:20:11","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"390:2:11"}},{"id":3475,"nodeType":"ErrorDefinition","src":"398:20:11","nodes":[],"errorSelector":"78fff396","name":"ZeroGasCoin","nameLocation":"404:11:11","parameters":{"id":3474,"nodeType":"ParameterList","parameters":[],"src":"415:2:11"}},{"id":3477,"nodeType":"ErrorDefinition","src":"423:21:11","nodes":[],"errorSelector":"e661aed0","name":"ZeroGasPrice","nameLocation":"429:12:11","parameters":{"id":3476,"nodeType":"ParameterList","parameters":[],"src":"441:2:11"}},{"id":3479,"nodeType":"ErrorDefinition","src":"449:21:11","nodes":[],"errorSelector":"10bad147","name":"LowAllowance","nameLocation":"455:12:11","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"467:2:11"}},{"id":3481,"nodeType":"ErrorDefinition","src":"475:19:11","nodes":[],"errorSelector":"fe382aa7","name":"LowBalance","nameLocation":"481:10:11","parameters":{"id":3480,"nodeType":"ParameterList","parameters":[],"src":"491:2:11"}},{"id":3483,"nodeType":"ErrorDefinition","src":"499:20:11","nodes":[],"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"505:11:11","parameters":{"id":3482,"nodeType":"ParameterList","parameters":[],"src":"516:2:11"}}],"abstract":false,"baseContracts":[],"canonicalName":"ZRC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":3467,"nodeType":"StructuredDocumentation","src":"165:39:11","text":" @dev Custom errors for ZRC20"},"fullyImplemented":true,"linearizedBaseContracts":[3484],"name":"ZRC20Errors","nameLocation":"215:11:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[]},{"id":4340,"nodeType":"ContractDefinition","src":"704:11440:11","nodes":[{"id":3494,"nodeType":"VariableDeclaration","src":"855:92:11","nodes":[],"constant":true,"documentation":{"id":3491,"nodeType":"StructuredDocumentation","src":"769:81:11","text":"@notice Fungible address is always the same, maintained at the protocol level"},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"879:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3492,"name":"address","nodeType":"ElementaryTypeName","src":"855:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":3493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"905:42:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":3497,"nodeType":"VariableDeclaration","src":"982:33:11","nodes":[],"constant":false,"documentation":{"id":3495,"nodeType":"StructuredDocumentation","src":"953:24:11","text":"@notice Chain id.abi"},"functionSelector":"85e1f4d0","mutability":"immutable","name":"CHAIN_ID","nameLocation":"1007:8:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3496,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3501,"nodeType":"VariableDeclaration","src":"1073:35:11","nodes":[],"constant":false,"documentation":{"id":3498,"nodeType":"StructuredDocumentation","src":"1021:47:11","text":"@notice Coin type, checkout Interfaces.sol."},"functionSelector":"a3413d03","mutability":"immutable","name":"COIN_TYPE","nameLocation":"1099:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3500,"nodeType":"UserDefinedTypeName","pathNode":{"id":3499,"name":"CoinType","nameLocations":["1073:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"1073:8:11"},"referencedDeclaration":4903,"src":"1073:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"public"},{"id":3504,"nodeType":"VariableDeclaration","src":"1234:38:11","nodes":[],"constant":false,"documentation":{"id":3502,"nodeType":"StructuredDocumentation","src":"1114:115:11","text":"@notice System contract address.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"f2441b32","mutability":"mutable","name":"SYSTEM_CONTRACT_ADDRESS","nameLocation":"1249:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3503,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3507,"nodeType":"VariableDeclaration","src":"1384:24:11","nodes":[],"baseFunctions":[4814],"constant":false,"documentation":{"id":3505,"nodeType":"StructuredDocumentation","src":"1278:101:11","text":"@notice Gas limit.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"091d2788","mutability":"mutable","name":"GAS_LIMIT","nameLocation":"1399:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3506,"name":"uint256","nodeType":"ElementaryTypeName","src":"1384:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3511,"nodeType":"VariableDeclaration","src":"1528:41:11","nodes":[],"baseFunctions":[4808],"constant":false,"documentation":{"id":3508,"nodeType":"StructuredDocumentation","src":"1414:109:11","text":"@notice Protocol flat fee.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"4d8943bb","mutability":"mutable","name":"PROTOCOL_FLAT_FEE","nameLocation":"1552:17:11","overrides":{"id":3510,"nodeType":"OverrideSpecifier","overrides":[],"src":"1543:8:11"},"scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3515,"nodeType":"VariableDeclaration","src":"1576:45:11","nodes":[],"constant":false,"mutability":"mutable","name":"_balances","nameLocation":"1612:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3514,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3512,"name":"address","nodeType":"ElementaryTypeName","src":"1584:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1576:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3513,"name":"uint256","nodeType":"ElementaryTypeName","src":"1595:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"id":3521,"nodeType":"VariableDeclaration","src":"1627:67:11","nodes":[],"constant":false,"mutability":"mutable","name":"_allowances","nameLocation":"1683:11:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3520,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3516,"name":"address","nodeType":"ElementaryTypeName","src":"1635:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1627:47:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3519,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3517,"name":"address","nodeType":"ElementaryTypeName","src":"1654:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1646:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"id":3523,"nodeType":"VariableDeclaration","src":"1700:28:11","nodes":[],"constant":false,"mutability":"mutable","name":"_totalSupply","nameLocation":"1716:12:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3522,"name":"uint256","nodeType":"ElementaryTypeName","src":"1700:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":3525,"nodeType":"VariableDeclaration","src":"1734:20:11","nodes":[],"constant":false,"mutability":"mutable","name":"_name","nameLocation":"1749:5:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3524,"name":"string","nodeType":"ElementaryTypeName","src":"1734:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3527,"nodeType":"VariableDeclaration","src":"1760:22:11","nodes":[],"constant":false,"mutability":"mutable","name":"_symbol","nameLocation":"1775:7:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3526,"name":"string","nodeType":"ElementaryTypeName","src":"1760:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3529,"nodeType":"VariableDeclaration","src":"1788:23:11","nodes":[],"constant":false,"mutability":"mutable","name":"_decimals","nameLocation":"1802:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3528,"name":"uint8","nodeType":"ElementaryTypeName","src":"1788:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"id":3532,"nodeType":"VariableDeclaration","src":"1958:29:11","nodes":[],"constant":false,"documentation":{"id":3530,"nodeType":"StructuredDocumentation","src":"1818:135:11","text":"@notice Gateway contract address.\n @dev This variable is added at last position to maintain storage layout with ZRC20.sol v1"},"functionSelector":"8b851b95","mutability":"mutable","name":"gatewayAddress","nameLocation":"1973:14:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3531,"name":"address","nodeType":"ElementaryTypeName","src":"1958:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3541,"nodeType":"FunctionDefinition","src":"1994:96:11","nodes":[],"body":{"id":3540,"nodeType":"Block","src":"2056:34:11","nodes":[],"statements":[{"expression":{"expression":{"id":3537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2073:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2077:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2073:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3536,"id":3539,"nodeType":"Return","src":"2066:17:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"2003:10:11","parameters":{"id":3533,"nodeType":"ParameterList","parameters":[],"src":"2013:2:11"},"returnParameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3541,"src":"2047:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3534,"name":"address","nodeType":"ElementaryTypeName","src":"2047:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2046:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":3554,"nodeType":"ModifierDefinition","src":"2155:129:11","nodes":[],"body":{"id":3553,"nodeType":"Block","src":"2179:105:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3544,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2193:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2197:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2193:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3546,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2207:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2193:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3551,"nodeType":"IfStatement","src":"2189:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3548,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2239:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2239:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3550,"nodeType":"RevertStatement","src":"2232:34:11"}},{"id":3552,"nodeType":"PlaceholderStatement","src":"2276:1:11"}]},"documentation":{"id":3542,"nodeType":"StructuredDocumentation","src":"2096:54:11","text":" @dev Only fungible module modifier."},"name":"onlyFungible","nameLocation":"2164:12:11","parameters":{"id":3543,"nodeType":"ParameterList","parameters":[],"src":"2176:2:11"},"virtual":false,"visibility":"internal"},{"id":3633,"nodeType":"FunctionDefinition","src":"2380:728:11","nodes":[],"body":{"id":3632,"nodeType":"Block","src":"2637:471:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3575,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2651:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2655:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2651:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3577,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2665:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2651:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3582,"nodeType":"IfStatement","src":"2647:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3579,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2697:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2697:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3581,"nodeType":"RevertStatement","src":"2690:34:11"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3583,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"2738:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2772:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2764:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3584,"name":"address","nodeType":"ElementaryTypeName","src":"2764:7:11","typeDescriptions":{}}},"id":3587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2764:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2738:36:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3589,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"2778:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2805:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2797:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3590,"name":"address","nodeType":"ElementaryTypeName","src":"2797:7:11","typeDescriptions":{}}},"id":3593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2797:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2778:29:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2738:69:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3599,"nodeType":"IfStatement","src":"2734:95:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3596,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"2816:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2816:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3598,"nodeType":"RevertStatement","src":"2809:20:11"}},{"expression":{"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3600,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"2839:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3601,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2847:5:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2839:13:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3603,"nodeType":"ExpressionStatement","src":"2839:13:11"},{"expression":{"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3604,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"2862:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3605,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3559,"src":"2872:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2862:17:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3607,"nodeType":"ExpressionStatement","src":"2862:17:11"},{"expression":{"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3608,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"2889:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3609,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3561,"src":"2901:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2889:21:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":3611,"nodeType":"ExpressionStatement","src":"2889:21:11"},{"expression":{"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3612,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"2920:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3613,"name":"chainid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"2931:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2920:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3615,"nodeType":"ExpressionStatement","src":"2920:19:11"},{"expression":{"id":3618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3616,"name":"COIN_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"2949:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3617,"name":"coinType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3566,"src":"2961:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"src":"2949:21:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"id":3619,"nodeType":"ExpressionStatement","src":"2949:21:11"},{"expression":{"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3620,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"2980:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3621,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"2992:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2980:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3623,"nodeType":"ExpressionStatement","src":"2980:21:11"},{"expression":{"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3624,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"3011:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3625,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"3037:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3011:48:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3627,"nodeType":"ExpressionStatement","src":"3011:48:11"},{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3628,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"3069:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3629,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"3086:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3069:32:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3631,"nodeType":"ExpressionStatement","src":"3069:32:11"}]},"documentation":{"id":3555,"nodeType":"StructuredDocumentation","src":"2290:85:11","text":" @dev The only one allowed to deploy new ZRC20 is fungible address."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3557,"mutability":"mutable","name":"name_","nameLocation":"2415:5:11","nodeType":"VariableDeclaration","scope":3633,"src":"2401:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3556,"name":"string","nodeType":"ElementaryTypeName","src":"2401:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3559,"mutability":"mutable","name":"symbol_","nameLocation":"2444:7:11","nodeType":"VariableDeclaration","scope":3633,"src":"2430:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3558,"name":"string","nodeType":"ElementaryTypeName","src":"2430:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3561,"mutability":"mutable","name":"decimals_","nameLocation":"2467:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2461:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3560,"name":"uint8","nodeType":"ElementaryTypeName","src":"2461:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3563,"mutability":"mutable","name":"chainid_","nameLocation":"2494:8:11","nodeType":"VariableDeclaration","scope":3633,"src":"2486:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"2486:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3566,"mutability":"mutable","name":"coinType_","nameLocation":"2521:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2512:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3565,"nodeType":"UserDefinedTypeName","pathNode":{"id":3564,"name":"CoinType","nameLocations":["2512:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"2512:8:11"},"referencedDeclaration":4903,"src":"2512:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"internal"},{"constant":false,"id":3568,"mutability":"mutable","name":"gasLimit_","nameLocation":"2548:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2540:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3567,"name":"uint256","nodeType":"ElementaryTypeName","src":"2540:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3570,"mutability":"mutable","name":"systemContractAddress_","nameLocation":"2575:22:11","nodeType":"VariableDeclaration","scope":3633,"src":"2567:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3569,"name":"address","nodeType":"ElementaryTypeName","src":"2567:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3572,"mutability":"mutable","name":"gatewayAddress_","nameLocation":"2615:15:11","nodeType":"VariableDeclaration","scope":3633,"src":"2607:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3571,"name":"address","nodeType":"ElementaryTypeName","src":"2607:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2391:245:11"},"returnParameters":{"id":3574,"nodeType":"ParameterList","parameters":[],"src":"2637:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":3643,"nodeType":"FunctionDefinition","src":"3183:98:11","nodes":[],"body":{"id":3642,"nodeType":"Block","src":"3252:29:11","nodes":[],"statements":[{"expression":{"id":3640,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3269:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3639,"id":3641,"nodeType":"Return","src":"3262:12:11"}]},"baseFunctions":[4833],"documentation":{"id":3634,"nodeType":"StructuredDocumentation","src":"3114:64:11","text":" @dev ZRC20 name\n @return name as string"},"functionSelector":"06fdde03","implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"3192:4:11","overrides":{"id":3636,"nodeType":"OverrideSpecifier","overrides":[],"src":"3219:8:11"},"parameters":{"id":3635,"nodeType":"ParameterList","parameters":[],"src":"3196:2:11"},"returnParameters":{"id":3639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3643,"src":"3237:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3637,"name":"string","nodeType":"ElementaryTypeName","src":"3237:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3236:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3657,"nodeType":"FunctionDefinition","src":"3363:103:11","nodes":[],"body":{"id":3656,"nodeType":"Block","src":"3434:32:11","nodes":[],"statements":[{"expression":{"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3652,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3444:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3653,"name":"newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"3452:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3444:15:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3655,"nodeType":"ExpressionStatement","src":"3444:15:11"}]},"baseFunctions":[4819],"documentation":{"id":3644,"nodeType":"StructuredDocumentation","src":"3287:71:11","text":" @dev Name can be updated by fungible module account."},"functionSelector":"c47f0027","implemented":true,"kind":"function","modifiers":[{"id":3650,"kind":"modifierInvocation","modifierName":{"id":3649,"name":"onlyFungible","nameLocations":["3421:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3421:12:11"},"nodeType":"ModifierInvocation","src":"3421:12:11"}],"name":"setName","nameLocation":"3372:7:11","overrides":{"id":3648,"nodeType":"OverrideSpecifier","overrides":[],"src":"3412:8:11"},"parameters":{"id":3647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3646,"mutability":"mutable","name":"newName","nameLocation":"3394:7:11","nodeType":"VariableDeclaration","scope":3657,"src":"3380:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3645,"name":"string","nodeType":"ElementaryTypeName","src":"3380:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3379:23:11"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"3434:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3671,"nodeType":"FunctionDefinition","src":"3550:111:11","nodes":[],"body":{"id":3670,"nodeType":"Block","src":"3625:36:11","nodes":[],"statements":[{"expression":{"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3666,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3635:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3667,"name":"newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3660,"src":"3645:9:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3635:19:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3669,"nodeType":"ExpressionStatement","src":"3635:19:11"}]},"baseFunctions":[4824],"documentation":{"id":3658,"nodeType":"StructuredDocumentation","src":"3472:73:11","text":" @dev Symbol can be updated by fungible module account."},"functionSelector":"b84c8246","implemented":true,"kind":"function","modifiers":[{"id":3664,"kind":"modifierInvocation","modifierName":{"id":3663,"name":"onlyFungible","nameLocations":["3612:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3612:12:11"},"nodeType":"ModifierInvocation","src":"3612:12:11"}],"name":"setSymbol","nameLocation":"3559:9:11","overrides":{"id":3662,"nodeType":"OverrideSpecifier","overrides":[],"src":"3603:8:11"},"parameters":{"id":3661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3660,"mutability":"mutable","name":"newSymbol","nameLocation":"3583:9:11","nodeType":"VariableDeclaration","scope":3671,"src":"3569:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3659,"name":"string","nodeType":"ElementaryTypeName","src":"3569:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3568:25:11"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"3625:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3681,"nodeType":"FunctionDefinition","src":"3742:102:11","nodes":[],"body":{"id":3680,"nodeType":"Block","src":"3813:31:11","nodes":[],"statements":[{"expression":{"id":3678,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3830:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3677,"id":3679,"nodeType":"Return","src":"3823:14:11"}]},"baseFunctions":[4838],"documentation":{"id":3672,"nodeType":"StructuredDocumentation","src":"3667:70:11","text":" @dev ZRC20 symbol.\n @return symbol as string."},"functionSelector":"95d89b41","implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"3751:6:11","overrides":{"id":3674,"nodeType":"OverrideSpecifier","overrides":[],"src":"3780:8:11"},"parameters":{"id":3673,"nodeType":"ParameterList","parameters":[],"src":"3757:2:11"},"returnParameters":{"id":3677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3681,"src":"3798:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3675,"name":"string","nodeType":"ElementaryTypeName","src":"3798:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3797:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3691,"nodeType":"FunctionDefinition","src":"3933:98:11","nodes":[],"body":{"id":3690,"nodeType":"Block","src":"3998:33:11","nodes":[],"statements":[{"expression":{"id":3688,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"4015:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":3687,"id":3689,"nodeType":"Return","src":"4008:16:11"}]},"baseFunctions":[4843],"documentation":{"id":3682,"nodeType":"StructuredDocumentation","src":"3850:78:11","text":" @dev ZRC20 decimals.\n @return returns uint8 decimals."},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3942:8:11","overrides":{"id":3684,"nodeType":"OverrideSpecifier","overrides":[],"src":"3973:8:11"},"parameters":{"id":3683,"nodeType":"ParameterList","parameters":[],"src":"3950:2:11"},"returnParameters":{"id":3687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3691,"src":"3991:5:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3685,"name":"uint8","nodeType":"ElementaryTypeName","src":"3991:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3990:7:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3701,"nodeType":"FunctionDefinition","src":"4130:106:11","nodes":[],"body":{"id":3700,"nodeType":"Block","src":"4200:36:11","nodes":[],"statements":[{"expression":{"id":3698,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"4217:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3697,"id":3699,"nodeType":"Return","src":"4210:19:11"}]},"baseFunctions":[4716],"documentation":{"id":3692,"nodeType":"StructuredDocumentation","src":"4037:88:11","text":" @dev ZRC20 total supply.\n @return returns uint256 total supply."},"functionSelector":"18160ddd","implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"4139:11:11","overrides":{"id":3694,"nodeType":"OverrideSpecifier","overrides":[],"src":"4173:8:11"},"parameters":{"id":3693,"nodeType":"ParameterList","parameters":[],"src":"4150:2:11"},"returnParameters":{"id":3697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3701,"src":"4191:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3695,"name":"uint256","nodeType":"ElementaryTypeName","src":"4191:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4190:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3715,"nodeType":"FunctionDefinition","src":"4418:125:11","nodes":[],"body":{"id":3714,"nodeType":"Block","src":"4501:42:11","nodes":[],"statements":[{"expression":{"baseExpression":{"id":3710,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"4518:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3712,"indexExpression":{"id":3711,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3704,"src":"4528:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4518:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3709,"id":3713,"nodeType":"Return","src":"4511:25:11"}]},"baseFunctions":[4723],"documentation":{"id":3702,"nodeType":"StructuredDocumentation","src":"4242:171:11","text":" @dev Returns ZRC20 balance of an account.\n @param account, account address for which balance is requested.\n @return uint256 account balance."},"functionSelector":"70a08231","implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"4427:9:11","overrides":{"id":3706,"nodeType":"OverrideSpecifier","overrides":[],"src":"4474:8:11"},"parameters":{"id":3705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"account","nameLocation":"4445:7:11","nodeType":"VariableDeclaration","scope":3715,"src":"4437:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3703,"name":"address","nodeType":"ElementaryTypeName","src":"4437:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4436:17:11"},"returnParameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3715,"src":"4492:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3707,"name":"uint256","nodeType":"ElementaryTypeName","src":"4492:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4491:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3736,"nodeType":"FunctionDefinition","src":"4741:172:11","nodes":[],"body":{"id":3735,"nodeType":"Block","src":"4833:80:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3727,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"4853:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4853:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3729,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"4867:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3730,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3720,"src":"4878:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3726,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"4843:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4843:42:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3732,"nodeType":"ExpressionStatement","src":"4843:42:11"},{"expression":{"hexValue":"74727565","id":3733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4902:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3725,"id":3734,"nodeType":"Return","src":"4895:11:11"}]},"baseFunctions":[4732],"documentation":{"id":3716,"nodeType":"StructuredDocumentation","src":"4549:187:11","text":" @dev Returns ZRC20 balance of an account.\n @param recipient, recipiuent address to which transfer is done.\n @return true/false if transfer succeeded/failed."},"functionSelector":"a9059cbb","implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4750:8:11","overrides":{"id":3722,"nodeType":"OverrideSpecifier","overrides":[],"src":"4809:8:11"},"parameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3718,"mutability":"mutable","name":"recipient","nameLocation":"4767:9:11","nodeType":"VariableDeclaration","scope":3736,"src":"4759:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3717,"name":"address","nodeType":"ElementaryTypeName","src":"4759:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3720,"mutability":"mutable","name":"amount","nameLocation":"4786:6:11","nodeType":"VariableDeclaration","scope":3736,"src":"4778:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4778:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4758:35:11"},"returnParameters":{"id":3725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3736,"src":"4827:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3723,"name":"bool","nodeType":"ElementaryTypeName","src":"4827:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4826:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3754,"nodeType":"FunctionDefinition","src":"5064:149:11","nodes":[],"body":{"id":3753,"nodeType":"Block","src":"5162:51:11","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":3747,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"5179:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3749,"indexExpression":{"id":3748,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3739,"src":"5191:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3751,"indexExpression":{"id":3750,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"5198:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3746,"id":3752,"nodeType":"Return","src":"5172:34:11"}]},"baseFunctions":[4741],"documentation":{"id":3737,"nodeType":"StructuredDocumentation","src":"4919:140:11","text":" @dev Returns token allowance from owner to spender.\n @param owner, owner address.\n @return uint256 allowance."},"functionSelector":"dd62ed3e","implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"5073:9:11","overrides":{"id":3743,"nodeType":"OverrideSpecifier","overrides":[],"src":"5135:8:11"},"parameters":{"id":3742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3739,"mutability":"mutable","name":"owner","nameLocation":"5091:5:11","nodeType":"VariableDeclaration","scope":3754,"src":"5083:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3738,"name":"address","nodeType":"ElementaryTypeName","src":"5083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"spender","nameLocation":"5106:7:11","nodeType":"VariableDeclaration","scope":3754,"src":"5098:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3740,"name":"address","nodeType":"ElementaryTypeName","src":"5098:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5082:32:11"},"returnParameters":{"id":3746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3754,"src":"5153:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3744,"name":"uint256","nodeType":"ElementaryTypeName","src":"5153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5152:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3775,"nodeType":"FunctionDefinition","src":"5417:166:11","nodes":[],"body":{"id":3774,"nodeType":"Block","src":"5506:77:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3766,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"5525:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5525:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3768,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3757,"src":"5539:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3759,"src":"5548:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3765,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"5516:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:39:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3771,"nodeType":"ExpressionStatement","src":"5516:39:11"},{"expression":{"hexValue":"74727565","id":3772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5572:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3764,"id":3773,"nodeType":"Return","src":"5565:11:11"}]},"baseFunctions":[4750],"documentation":{"id":3755,"nodeType":"StructuredDocumentation","src":"5219:193:11","text":" @dev Approves amount transferFrom for spender.\n @param spender, spender address.\n @param amount, amount to approve.\n @return true/false if succeeded/failed."},"functionSelector":"095ea7b3","implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"5426:7:11","overrides":{"id":3761,"nodeType":"OverrideSpecifier","overrides":[],"src":"5482:8:11"},"parameters":{"id":3760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"spender","nameLocation":"5442:7:11","nodeType":"VariableDeclaration","scope":3775,"src":"5434:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3756,"name":"address","nodeType":"ElementaryTypeName","src":"5434:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3759,"mutability":"mutable","name":"amount","nameLocation":"5459:6:11","nodeType":"VariableDeclaration","scope":3775,"src":"5451:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3758,"name":"uint256","nodeType":"ElementaryTypeName","src":"5451:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5433:33:11"},"returnParameters":{"id":3764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3775,"src":"5500:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3762,"name":"bool","nodeType":"ElementaryTypeName","src":"5500:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5499:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3822,"nodeType":"FunctionDefinition","src":"5831:388:11","nodes":[],"body":{"id":3821,"nodeType":"Block","src":"5943:276:11","nodes":[],"statements":[{"expression":{"arguments":[{"id":3789,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"5963:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3790,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3780,"src":"5971:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3791,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"5982:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3788,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"5953:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5953:36:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3793,"nodeType":"ExpressionStatement","src":"5953:36:11"},{"assignments":[3795],"declarations":[{"constant":false,"id":3795,"mutability":"mutable","name":"currentAllowance","nameLocation":"6008:16:11","nodeType":"VariableDeclaration","scope":3821,"src":"6000:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3794,"name":"uint256","nodeType":"ElementaryTypeName","src":"6000:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3802,"initialValue":{"baseExpression":{"baseExpression":{"id":3796,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"6027:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3798,"indexExpression":{"id":3797,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6039:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:19:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3801,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3799,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6047:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6047:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:33:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6000:60:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3803,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6074:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3804,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6093:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6074:25:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3809,"nodeType":"IfStatement","src":"6070:52:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3806,"name":"LowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3479,"src":"6108:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6108:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3808,"nodeType":"RevertStatement","src":"6101:21:11"}},{"expression":{"arguments":[{"id":3811,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6142:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":3812,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6150:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6150:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3814,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6164:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6183:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6164:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3810,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"6133:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6133:57:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3818,"nodeType":"ExpressionStatement","src":"6133:57:11"},{"expression":{"hexValue":"74727565","id":3819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6208:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3787,"id":3820,"nodeType":"Return","src":"6201:11:11"}]},"baseFunctions":[4761],"documentation":{"id":3776,"nodeType":"StructuredDocumentation","src":"5589:237:11","text":" @dev Transfers tokens from sender to recipient.\n @param sender, sender address.\n @param recipient, recipient address.\n @param amount, amount to transfer.\n @return true/false if succeeded/failed."},"functionSelector":"23b872dd","implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5840:12:11","overrides":{"id":3784,"nodeType":"OverrideSpecifier","overrides":[],"src":"5919:8:11"},"parameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3778,"mutability":"mutable","name":"sender","nameLocation":"5861:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3777,"name":"address","nodeType":"ElementaryTypeName","src":"5853:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3780,"mutability":"mutable","name":"recipient","nameLocation":"5877:9:11","nodeType":"VariableDeclaration","scope":3822,"src":"5869:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"amount","nameLocation":"5896:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5888:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5888:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5852:51:11"},"returnParameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3822,"src":"5937:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3785,"name":"bool","nodeType":"ElementaryTypeName","src":"5937:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5936:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3840,"nodeType":"FunctionDefinition","src":"6365:126:11","nodes":[],"body":{"id":3839,"nodeType":"Block","src":"6428:63:11","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":3832,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6444:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6448:6:11","memberName":"sender","nodeType":"MemberAccess","src":"6444:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3834,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3825,"src":"6456:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3831,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"6438:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6438:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3836,"nodeType":"ExpressionStatement","src":"6438:25:11"},{"expression":{"hexValue":"74727565","id":3837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6480:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3830,"id":3838,"nodeType":"Return","src":"6473:11:11"}]},"baseFunctions":[4777],"documentation":{"id":3823,"nodeType":"StructuredDocumentation","src":"6225:135:11","text":" @dev Burns an amount of tokens.\n @param amount, amount to burn.\n @return true/false if succeeded/failed."},"functionSelector":"42966c68","implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"6374:4:11","overrides":{"id":3827,"nodeType":"OverrideSpecifier","overrides":[],"src":"6404:8:11"},"parameters":{"id":3826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3825,"mutability":"mutable","name":"amount","nameLocation":"6387:6:11","nodeType":"VariableDeclaration","scope":3840,"src":"6379:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3824,"name":"uint256","nodeType":"ElementaryTypeName","src":"6379:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6378:16:11"},"returnParameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3840,"src":"6422:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3828,"name":"bool","nodeType":"ElementaryTypeName","src":"6422:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6421:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3903,"nodeType":"FunctionDefinition","src":"6497:462:11","nodes":[],"body":{"id":3902,"nodeType":"Block","src":"6584:375:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3849,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6598:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6616:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6608:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3850,"name":"address","nodeType":"ElementaryTypeName","src":"6608:7:11","typeDescriptions":{}}},"id":3853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6608:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6598:20:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3858,"nodeType":"IfStatement","src":"6594:46:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3855,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6627:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6627:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3857,"nodeType":"RevertStatement","src":"6620:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3859,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6654:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6675:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6667:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3860,"name":"address","nodeType":"ElementaryTypeName","src":"6667:7:11","typeDescriptions":{}}},"id":3863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6667:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6654:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3868,"nodeType":"IfStatement","src":"6650:49:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3865,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6686:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6686:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3867,"nodeType":"RevertStatement","src":"6679:20:11"}},{"assignments":[3870],"declarations":[{"constant":false,"id":3870,"mutability":"mutable","name":"senderBalance","nameLocation":"6718:13:11","nodeType":"VariableDeclaration","scope":3902,"src":"6710:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3869,"name":"uint256","nodeType":"ElementaryTypeName","src":"6710:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3874,"initialValue":{"baseExpression":{"id":3871,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6734:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3873,"indexExpression":{"id":3872,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6744:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6734:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6710:41:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3875,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6765:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3876,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6781:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6765:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3881,"nodeType":"IfStatement","src":"6761:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3878,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"6796:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3880,"nodeType":"RevertStatement","src":"6789:19:11"}},{"expression":{"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3882,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6819:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3884,"indexExpression":{"id":3883,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6829:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6819:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3885,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6839:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6855:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6839:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6819:42:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3889,"nodeType":"ExpressionStatement","src":"6819:42:11"},{"expression":{"id":3894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3890,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6871:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3892,"indexExpression":{"id":3891,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6881:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6871:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3893,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6895:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6871:30:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3895,"nodeType":"ExpressionStatement","src":"6871:30:11"},{"eventCall":{"arguments":[{"id":3897,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6926:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3898,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6934:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3899,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6945:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3896,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"6917:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6917:35:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3901,"nodeType":"EmitStatement","src":"6912:40:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6506:9:11","parameters":{"id":3847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"sender","nameLocation":"6524:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6516:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3841,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3844,"mutability":"mutable","name":"recipient","nameLocation":"6540:9:11","nodeType":"VariableDeclaration","scope":3903,"src":"6532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3843,"name":"address","nodeType":"ElementaryTypeName","src":"6532:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3846,"mutability":"mutable","name":"amount","nameLocation":"6559:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6551:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3845,"name":"uint256","nodeType":"ElementaryTypeName","src":"6551:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6515:51:11"},"returnParameters":{"id":3848,"nodeType":"ParameterList","parameters":[],"src":"6584:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3940,"nodeType":"FunctionDefinition","src":"6965:252:11","nodes":[],"body":{"id":3939,"nodeType":"Block","src":"7030:187:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3910,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7044:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7063:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7055:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3911,"name":"address","nodeType":"ElementaryTypeName","src":"7055:7:11","typeDescriptions":{}}},"id":3914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7055:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7044:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3919,"nodeType":"IfStatement","src":"7040:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3916,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7074:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7074:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3918,"nodeType":"RevertStatement","src":"7067:20:11"}},{"expression":{"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3920,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7098:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3921,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7114:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7098:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3923,"nodeType":"ExpressionStatement","src":"7098:22:11"},{"expression":{"id":3928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3924,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7130:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3926,"indexExpression":{"id":3925,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7140:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7130:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3927,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7152:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7130:28:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3929,"nodeType":"ExpressionStatement","src":"7130:28:11"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":3933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7190:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7182:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"7182:7:11","typeDescriptions":{}}},"id":3934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7182:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3935,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7194:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3936,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7203:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3930,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7173:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7173:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3938,"nodeType":"EmitStatement","src":"7168:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"6974:5:11","parameters":{"id":3908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3905,"mutability":"mutable","name":"account","nameLocation":"6988:7:11","nodeType":"VariableDeclaration","scope":3940,"src":"6980:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3904,"name":"address","nodeType":"ElementaryTypeName","src":"6980:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3907,"mutability":"mutable","name":"amount","nameLocation":"7005:6:11","nodeType":"VariableDeclaration","scope":3940,"src":"6997:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3906,"name":"uint256","nodeType":"ElementaryTypeName","src":"6997:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6979:33:11"},"returnParameters":{"id":3909,"nodeType":"ParameterList","parameters":[],"src":"7030:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3992,"nodeType":"FunctionDefinition","src":"7223:381:11","nodes":[],"body":{"id":3991,"nodeType":"Block","src":"7288:316:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3947,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7302:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7321:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7313:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3948,"name":"address","nodeType":"ElementaryTypeName","src":"7313:7:11","typeDescriptions":{}}},"id":3951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7313:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7302:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3956,"nodeType":"IfStatement","src":"7298:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3953,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7332:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3955,"nodeType":"RevertStatement","src":"7325:20:11"}},{"assignments":[3958],"declarations":[{"constant":false,"id":3958,"mutability":"mutable","name":"accountBalance","nameLocation":"7364:14:11","nodeType":"VariableDeclaration","scope":3991,"src":"7356:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3957,"name":"uint256","nodeType":"ElementaryTypeName","src":"7356:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3962,"initialValue":{"baseExpression":{"id":3959,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7381:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3961,"indexExpression":{"id":3960,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7391:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7381:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7356:43:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3963,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7413:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3964,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7430:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7413:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3969,"nodeType":"IfStatement","src":"7409:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3966,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"7445:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7445:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3968,"nodeType":"RevertStatement","src":"7438:19:11"}},{"expression":{"id":3976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3970,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7468:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3972,"indexExpression":{"id":3971,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7478:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7468:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3973,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7489:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3974,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7506:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7489:23:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7468:44:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3977,"nodeType":"ExpressionStatement","src":"7468:44:11"},{"expression":{"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3978,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7522:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3979,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7538:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3981,"nodeType":"ExpressionStatement","src":"7522:22:11"},{"eventCall":{"arguments":[{"id":3983,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7569:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":3986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7586:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7578:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3984,"name":"address","nodeType":"ElementaryTypeName","src":"7578:7:11","typeDescriptions":{}}},"id":3987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7578:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3988,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7590:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3982,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7560:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7560:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3990,"nodeType":"EmitStatement","src":"7555:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7232:5:11","parameters":{"id":3945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3942,"mutability":"mutable","name":"account","nameLocation":"7246:7:11","nodeType":"VariableDeclaration","scope":3992,"src":"7238:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3941,"name":"address","nodeType":"ElementaryTypeName","src":"7238:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3944,"mutability":"mutable","name":"amount","nameLocation":"7263:6:11","nodeType":"VariableDeclaration","scope":3992,"src":"7255:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3943,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7237:33:11"},"returnParameters":{"id":3946,"nodeType":"ParameterList","parameters":[],"src":"7288:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4036,"nodeType":"FunctionDefinition","src":"7610:296:11","nodes":[],"body":{"id":4035,"nodeType":"Block","src":"7693:213:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4001,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7707:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7724:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7716:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4002,"name":"address","nodeType":"ElementaryTypeName","src":"7716:7:11","typeDescriptions":{}}},"id":4005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7707:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4010,"nodeType":"IfStatement","src":"7703:45:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4007,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7735:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7735:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4009,"nodeType":"RevertStatement","src":"7728:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4011,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7762:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7781:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7773:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4012,"name":"address","nodeType":"ElementaryTypeName","src":"7773:7:11","typeDescriptions":{}}},"id":4015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7773:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7762:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4020,"nodeType":"IfStatement","src":"7758:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4017,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7792:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7792:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4019,"nodeType":"RevertStatement","src":"7785:20:11"}},{"expression":{"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4021,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"7816:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":4024,"indexExpression":{"id":4022,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7828:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7816:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4025,"indexExpression":{"id":4023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7835:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7816:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4026,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7846:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7816:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4028,"nodeType":"ExpressionStatement","src":"7816:36:11"},{"eventCall":{"arguments":[{"id":4030,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7876:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4031,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7883:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7892:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4029,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4861,"src":"7867:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":4033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7867:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4034,"nodeType":"EmitStatement","src":"7862:37:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7619:8:11","parameters":{"id":3999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3994,"mutability":"mutable","name":"owner","nameLocation":"7636:5:11","nodeType":"VariableDeclaration","scope":4036,"src":"7628:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3993,"name":"address","nodeType":"ElementaryTypeName","src":"7628:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"spender","nameLocation":"7651:7:11","nodeType":"VariableDeclaration","scope":4036,"src":"7643:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3995,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3998,"mutability":"mutable","name":"amount","nameLocation":"7668:6:11","nodeType":"VariableDeclaration","scope":4036,"src":"7660:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3997,"name":"uint256","nodeType":"ElementaryTypeName","src":"7660:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7627:48:11"},"returnParameters":{"id":4000,"nodeType":"ParameterList","parameters":[],"src":"7693:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4082,"nodeType":"FunctionDefinition","src":"8150:396:11","nodes":[],"body":{"id":4081,"nodeType":"Block","src":"8228:318:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4047,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8255:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8259:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8255:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4049,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8269:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8255:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4051,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8296:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8300:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8296:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4053,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8310:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8296:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:78:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8353:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8357:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8353:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4058,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"8367:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8353:28:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:126:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4064,"nodeType":"IfStatement","src":"8238:176:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4061,"name":"InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3471,"src":"8399:13:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8399:15:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4063,"nodeType":"RevertStatement","src":"8392:22:11"}},{"expression":{"arguments":[{"id":4066,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8430:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4067,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8434:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4065,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"8424:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:17:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4069,"nodeType":"ExpressionStatement","src":"8424:17:11"},{"eventCall":{"arguments":[{"arguments":[{"id":4073,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8481:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4071,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8464:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8468:12:11","memberName":"encodePacked","nodeType":"MemberAccess","src":"8464:16:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8464:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4075,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8507:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8511:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4070,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"8456:7:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes memory,address,uint256)"}},"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8456:62:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4078,"nodeType":"EmitStatement","src":"8451:67:11"},{"expression":{"hexValue":"74727565","id":4079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8535:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4046,"id":4080,"nodeType":"Return","src":"8528:11:11"}]},"baseFunctions":[4770],"documentation":{"id":4037,"nodeType":"StructuredDocumentation","src":"7912:233:11","text":" @dev Deposits corresponding tokens from external chain, only callable by Fungible module.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"47e7ef24","implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"8159:7:11","overrides":{"id":4043,"nodeType":"OverrideSpecifier","overrides":[],"src":"8204:8:11"},"parameters":{"id":4042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4039,"mutability":"mutable","name":"to","nameLocation":"8175:2:11","nodeType":"VariableDeclaration","scope":4082,"src":"8167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4038,"name":"address","nodeType":"ElementaryTypeName","src":"8167:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4041,"mutability":"mutable","name":"amount","nameLocation":"8187:6:11","nodeType":"VariableDeclaration","scope":4082,"src":"8179:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4040,"name":"uint256","nodeType":"ElementaryTypeName","src":"8179:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8166:28:11"},"returnParameters":{"id":4046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4082,"src":"8222:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4044,"name":"bool","nodeType":"ElementaryTypeName","src":"8222:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8221:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4140,"nodeType":"FunctionDefinition","src":"8731:498:11","nodes":[],"body":{"id":4139,"nodeType":"Block","src":"8805:424:11","nodes":[],"statements":[{"assignments":[4092],"declarations":[{"constant":false,"id":4092,"mutability":"mutable","name":"gasZRC20","nameLocation":"8823:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8815:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"8815:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4099,"initialValue":{"arguments":[{"id":4097,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"8889:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4094,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8842:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4093,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8834:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8867:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"8834:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8815:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4100,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"8912:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8924:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4101,"name":"address","nodeType":"ElementaryTypeName","src":"8924:7:11","typeDescriptions":{}}},"id":4104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8924:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8912:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4109,"nodeType":"IfStatement","src":"8908:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4106,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"8943:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8943:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4108,"nodeType":"RevertStatement","src":"8936:20:11"}},{"assignments":[4111],"declarations":[{"constant":false,"id":4111,"mutability":"mutable","name":"gasPrice","nameLocation":"8975:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8967:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4110,"name":"uint256","nodeType":"ElementaryTypeName","src":"8967:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4118,"initialValue":{"arguments":[{"id":4116,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9037:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4113,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8994:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4112,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8986:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9019:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"8986:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8967:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9060:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9072:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9060:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4126,"nodeType":"IfStatement","src":"9056:65:11","trueBody":{"id":4125,"nodeType":"Block","src":"9075:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4122,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9096:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9096:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4124,"nodeType":"RevertStatement","src":"9089:21:11"}]}},{"assignments":[4128],"declarations":[{"constant":false,"id":4128,"mutability":"mutable","name":"gasFee","nameLocation":"9138:6:11","nodeType":"VariableDeclaration","scope":4139,"src":"9130:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4127,"name":"uint256","nodeType":"ElementaryTypeName","src":"9130:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4134,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4129,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9147:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4130,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"9158:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4132,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9170:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:40:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9130:57:11"},{"expression":{"components":[{"id":4135,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"9205:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4136,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"9215:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4137,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9204:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4090,"id":4138,"nodeType":"Return","src":"9197:25:11"}]},"baseFunctions":[4793],"documentation":{"id":4083,"nodeType":"StructuredDocumentation","src":"8552:174:11","text":" @dev Withdraws gas fees.\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"d9eeebed","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFee","nameLocation":"8740:14:11","overrides":{"id":4085,"nodeType":"OverrideSpecifier","overrides":[],"src":"8769:8:11"},"parameters":{"id":4084,"nodeType":"ParameterList","parameters":[],"src":"8754:2:11"},"returnParameters":{"id":4090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8787:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4086,"name":"address","nodeType":"ElementaryTypeName","src":"8787:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8796:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8796:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8786:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4200,"nodeType":"FunctionDefinition","src":"9437:525:11","nodes":[],"body":{"id":4199,"nodeType":"Block","src":"9539:423:11","nodes":[],"statements":[{"assignments":[4152],"declarations":[{"constant":false,"id":4152,"mutability":"mutable","name":"gasZRC20","nameLocation":"9557:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9549:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4151,"name":"address","nodeType":"ElementaryTypeName","src":"9549:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4159,"initialValue":{"arguments":[{"id":4157,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9623:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4154,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9576:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4153,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9568:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9601:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"9568:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9549:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4160,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9646:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9666:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9658:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4161,"name":"address","nodeType":"ElementaryTypeName","src":"9658:7:11","typeDescriptions":{}}},"id":4164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9658:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9646:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4169,"nodeType":"IfStatement","src":"9642:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4166,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"9677:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4168,"nodeType":"RevertStatement","src":"9670:20:11"}},{"assignments":[4171],"declarations":[{"constant":false,"id":4171,"mutability":"mutable","name":"gasPrice","nameLocation":"9709:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9701:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"9701:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4178,"initialValue":{"arguments":[{"id":4176,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9771:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4173,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9728:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4172,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9720:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9753:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"9720:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9701:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4179,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9794:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9806:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9794:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4186,"nodeType":"IfStatement","src":"9790:65:11","trueBody":{"id":4185,"nodeType":"Block","src":"9809:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4182,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9830:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9830:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4184,"nodeType":"RevertStatement","src":"9823:21:11"}]}},{"assignments":[4188],"declarations":[{"constant":false,"id":4188,"mutability":"mutable","name":"gasFee","nameLocation":"9872:6:11","nodeType":"VariableDeclaration","scope":4199,"src":"9864:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4187,"name":"uint256","nodeType":"ElementaryTypeName","src":"9864:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4194,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4189,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9881:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4190,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4143,"src":"9892:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4192,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9903:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:39:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9864:56:11"},{"expression":{"components":[{"id":4195,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9938:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4196,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"9948:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9937:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4150,"id":4198,"nodeType":"Return","src":"9930:25:11"}]},"baseFunctions":[4802],"documentation":{"id":4141,"nodeType":"StructuredDocumentation","src":"9235:197:11","text":" @dev Withdraws gas fees with specified gasLimit\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"fc5fecd5","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFeeWithGasLimit","nameLocation":"9446:26:11","overrides":{"id":4145,"nodeType":"OverrideSpecifier","overrides":[],"src":"9503:8:11"},"parameters":{"id":4144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"mutability":"mutable","name":"gasLimit","nameLocation":"9481:8:11","nodeType":"VariableDeclaration","scope":4200,"src":"9473:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4142,"name":"uint256","nodeType":"ElementaryTypeName","src":"9473:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9472:18:11"},"returnParameters":{"id":4150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9521:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4146,"name":"address","nodeType":"ElementaryTypeName","src":"9521:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9530:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4148,"name":"uint256","nodeType":"ElementaryTypeName","src":"9530:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9520:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4251,"nodeType":"FunctionDefinition","src":"10352:430:11","nodes":[],"body":{"id":4250,"nodeType":"Block","src":"10436:346:11","nodes":[],"statements":[{"assignments":[4212,4214],"declarations":[{"constant":false,"id":4212,"mutability":"mutable","name":"gasZRC20","nameLocation":"10455:8:11","nodeType":"VariableDeclaration","scope":4250,"src":"10447:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4211,"name":"address","nodeType":"ElementaryTypeName","src":"10447:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4214,"mutability":"mutable","name":"gasFee","nameLocation":"10473:6:11","nodeType":"VariableDeclaration","scope":4250,"src":"10465:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4213,"name":"uint256","nodeType":"ElementaryTypeName","src":"10465:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":4215,"name":"withdrawGasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4140,"src":"10483:14:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint256_$","typeString":"function () view returns (address,uint256)"}},"id":4216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10483:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10446:53:11"},{"condition":{"id":4227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10513:75:11","subExpression":{"arguments":[{"expression":{"id":4222,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10544:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10548:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10544:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4224,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"10556:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4225,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10581:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4219,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4212,"src":"10521:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4218,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10514:6:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":4221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10531:12:11","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"10514:29:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":4226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:74:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4232,"nodeType":"IfStatement","src":"10509:135:11","trueBody":{"id":4231,"nodeType":"Block","src":"10590:54:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4228,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3473,"src":"10611:20:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10611:22:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4230,"nodeType":"RevertStatement","src":"10604:29:11"}]}},{"expression":{"arguments":[{"expression":{"id":4234,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10659:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10663:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10659:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4236,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10671:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4233,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"10653:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10653:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4238,"nodeType":"ExpressionStatement","src":"10653:25:11"},{"eventCall":{"arguments":[{"expression":{"id":4240,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10704:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10708:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10704:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4242,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"10716:2:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4243,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10720:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4244,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10728:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4245,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"10736:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4239,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"10693:10:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,bytes memory,uint256,uint256,uint256)"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:61:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4247,"nodeType":"EmitStatement","src":"10688:66:11"},{"expression":{"hexValue":"74727565","id":4248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10771:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4210,"id":4249,"nodeType":"Return","src":"10764:11:11"}]},"baseFunctions":[4786],"documentation":{"id":4201,"nodeType":"StructuredDocumentation","src":"9968:379:11","text":" @dev Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the\n outbound chain\n this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"c7012626","implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"10361:8:11","overrides":{"id":4207,"nodeType":"OverrideSpecifier","overrides":[],"src":"10412:8:11"},"parameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4203,"mutability":"mutable","name":"to","nameLocation":"10383:2:11","nodeType":"VariableDeclaration","scope":4251,"src":"10370:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4202,"name":"bytes","nodeType":"ElementaryTypeName","src":"10370:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"amount","nameLocation":"10395:6:11","nodeType":"VariableDeclaration","scope":4251,"src":"10387:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4204,"name":"uint256","nodeType":"ElementaryTypeName","src":"10387:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10369:33:11"},"returnParameters":{"id":4210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4251,"src":"10430:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4208,"name":"bool","nodeType":"ElementaryTypeName","src":"10430:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10429:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4278,"nodeType":"FunctionDefinition","src":"10942:216:11","nodes":[],"body":{"id":4277,"nodeType":"Block","src":"11015:143:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4259,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11029:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11045:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11037:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4260,"name":"address","nodeType":"ElementaryTypeName","src":"11037:7:11","typeDescriptions":{}}},"id":4263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11037:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11029:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4268,"nodeType":"IfStatement","src":"11025:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4265,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11056:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11056:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4267,"nodeType":"RevertStatement","src":"11049:20:11"}},{"expression":{"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4269,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"11079:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4270,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11105:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11079:30:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4272,"nodeType":"ExpressionStatement","src":"11079:30:11"},{"eventCall":{"arguments":[{"id":4274,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11146:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4273,"name":"UpdatedSystemContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4885,"src":"11124:21:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11124:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4276,"nodeType":"EmitStatement","src":"11119:32:11"}]},"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"10788:149:11","text":" @dev Updates system contract address. Can only be updated by the fungible module.\n @param addr, new system contract address."},"functionSelector":"c835d7cc","implemented":true,"kind":"function","modifiers":[{"id":4257,"kind":"modifierInvocation","modifierName":{"id":4256,"name":"onlyFungible","nameLocations":["11002:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11002:12:11"},"nodeType":"ModifierInvocation","src":"11002:12:11"}],"name":"updateSystemContractAddress","nameLocation":"10951:27:11","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"addr","nameLocation":"10987:4:11","nodeType":"VariableDeclaration","scope":4278,"src":"10979:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4253,"name":"address","nodeType":"ElementaryTypeName","src":"10979:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10978:14:11"},"returnParameters":{"id":4258,"nodeType":"ParameterList","parameters":[],"src":"11015:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4305,"nodeType":"FunctionDefinition","src":"11320:193:11","nodes":[],"body":{"id":4304,"nodeType":"Block","src":"11386:127:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4286,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11400:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11416:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11408:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4287,"name":"address","nodeType":"ElementaryTypeName","src":"11408:7:11","typeDescriptions":{}}},"id":4290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11408:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11400:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4295,"nodeType":"IfStatement","src":"11396:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4292,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11427:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11427:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4294,"nodeType":"RevertStatement","src":"11420:20:11"}},{"expression":{"id":4298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4296,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"11450:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4297,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11467:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11450:21:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4299,"nodeType":"ExpressionStatement","src":"11450:21:11"},{"eventCall":{"arguments":[{"id":4301,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11501:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4300,"name":"UpdatedGateway","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4889,"src":"11486:14:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11486:20:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4303,"nodeType":"EmitStatement","src":"11481:25:11"}]},"documentation":{"id":4279,"nodeType":"StructuredDocumentation","src":"11164:151:11","text":" @dev Updates gateway contract address. Can only be updated by the fungible module.\n @param addr, new gateway contract address."},"functionSelector":"ccc77599","implemented":true,"kind":"function","modifiers":[{"id":4284,"kind":"modifierInvocation","modifierName":{"id":4283,"name":"onlyFungible","nameLocations":["11373:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11373:12:11"},"nodeType":"ModifierInvocation","src":"11373:12:11"}],"name":"updateGatewayAddress","nameLocation":"11329:20:11","parameters":{"id":4282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4281,"mutability":"mutable","name":"addr","nameLocation":"11358:4:11","nodeType":"VariableDeclaration","scope":4305,"src":"11350:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4280,"name":"address","nodeType":"ElementaryTypeName","src":"11350:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11349:14:11"},"returnParameters":{"id":4285,"nodeType":"ParameterList","parameters":[],"src":"11386:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4322,"nodeType":"FunctionDefinition","src":"11650:144:11","nodes":[],"body":{"id":4321,"nodeType":"Block","src":"11715:79:11","nodes":[],"statements":[{"expression":{"id":4315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4313,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11725:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4314,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4308,"src":"11737:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11725:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4316,"nodeType":"ExpressionStatement","src":"11725:21:11"},{"eventCall":{"arguments":[{"id":4318,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11777:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4317,"name":"UpdatedGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"11761:15:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11761:26:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4320,"nodeType":"EmitStatement","src":"11756:31:11"}]},"documentation":{"id":4306,"nodeType":"StructuredDocumentation","src":"11519:126:11","text":" @dev Updates gas limit. Can only be updated by the fungible module.\n @param gasLimit_, new gas limit."},"functionSelector":"f687d12a","implemented":true,"kind":"function","modifiers":[{"id":4311,"kind":"modifierInvocation","modifierName":{"id":4310,"name":"onlyFungible","nameLocations":["11702:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11702:12:11"},"nodeType":"ModifierInvocation","src":"11702:12:11"}],"name":"updateGasLimit","nameLocation":"11659:14:11","parameters":{"id":4309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4308,"mutability":"mutable","name":"gasLimit_","nameLocation":"11682:9:11","nodeType":"VariableDeclaration","scope":4322,"src":"11674:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4307,"name":"uint256","nodeType":"ElementaryTypeName","src":"11674:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11673:19:11"},"returnParameters":{"id":4312,"nodeType":"ParameterList","parameters":[],"src":"11715:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4339,"nodeType":"FunctionDefinition","src":"11954:188:11","nodes":[],"body":{"id":4338,"nodeType":"Block","src":"12033:109:11","nodes":[],"statements":[{"expression":{"id":4332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4330,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12043:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4331,"name":"protocolFlatFee_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"12063:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12043:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4333,"nodeType":"ExpressionStatement","src":"12043:36:11"},{"eventCall":{"arguments":[{"id":4335,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12117:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4334,"name":"UpdatedProtocolFlatFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"12094:22:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12094:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4337,"nodeType":"EmitStatement","src":"12089:46:11"}]},"documentation":{"id":4323,"nodeType":"StructuredDocumentation","src":"11800:149:11","text":" @dev Updates protocol flat fee. Can only be updated by the fungible module.\n @param protocolFlatFee_, new protocol flat fee."},"functionSelector":"eddeb123","implemented":true,"kind":"function","modifiers":[{"id":4328,"kind":"modifierInvocation","modifierName":{"id":4327,"name":"onlyFungible","nameLocations":["12020:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"12020:12:11"},"nodeType":"ModifierInvocation","src":"12020:12:11"}],"name":"updateProtocolFlatFee","nameLocation":"11963:21:11","parameters":{"id":4326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4325,"mutability":"mutable","name":"protocolFlatFee_","nameLocation":"11993:16:11","nodeType":"VariableDeclaration","scope":4339,"src":"11985:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4324,"name":"uint256","nodeType":"ElementaryTypeName","src":"11985:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11984:26:11"},"returnParameters":{"id":4329,"nodeType":"ParameterList","parameters":[],"src":"12033:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":3485,"name":"IZRC20Metadata","nameLocations":["722:14:11"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"722:14:11"},"id":3486,"nodeType":"InheritanceSpecifier","src":"722:14:11"},{"baseName":{"id":3487,"name":"ZRC20Errors","nameLocations":["738:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":3484,"src":"738:11:11"},"id":3488,"nodeType":"InheritanceSpecifier","src":"738:11:11"},{"baseName":{"id":3489,"name":"ZRC20Events","nameLocations":["751:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":4898,"src":"751:11:11"},"id":3490,"nodeType":"InheritanceSpecifier","src":"751:11:11"}],"canonicalName":"ZRC20","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[4340,4898,3484,4844,4825],"name":"ZRC20","nameLocation":"713:5:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[4853,4861,4869,4881,4885,4889,4893,4897]}],"license":"MIT"},"id":11} \ No newline at end of file diff --git a/packages/client/src/abi/ZRC20.sol/ZRC20Errors.json b/packages/client/src/abi/ZRC20.sol/ZRC20Errors.json new file mode 100644 index 00000000..00dcb325 --- /dev/null +++ b/packages/client/src/abi/ZRC20.sol/ZRC20Errors.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"CallerIsNotFungibleModule","inputs":[]},{"type":"error","name":"GasFeeTransferFailed","inputs":[]},{"type":"error","name":"InvalidSender","inputs":[]},{"type":"error","name":"LowAllowance","inputs":[]},{"type":"error","name":"LowBalance","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroGasCoin","inputs":[]},{"type":"error","name":"ZeroGasPrice","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LowBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasCoin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroGasPrice\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Custom errors for ZRC20\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/zevm/ZRC20.sol\":\"ZRC20Errors\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":test/=test/\"]},\"sources\":{\"contracts/zevm/ZRC20.sol\":{\"keccak256\":\"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e\",\"dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi\"]},\"contracts/zevm/interfaces/ISystem.sol\":{\"keccak256\":\"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d\",\"dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u\"]},\"contracts/zevm/interfaces/IZRC20.sol\":{\"keccak256\":\"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf\",\"dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"CallerIsNotFungibleModule"},{"inputs":[],"type":"error","name":"GasFeeTransferFailed"},{"inputs":[],"type":"error","name":"InvalidSender"},{"inputs":[],"type":"error","name":"LowAllowance"},{"inputs":[],"type":"error","name":"LowBalance"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroGasCoin"},{"inputs":[],"type":"error","name":"ZeroGasPrice"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=node_modules/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","test/=test/"],"optimizer":{"enabled":true,"runs":10000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/zevm/ZRC20.sol":"ZRC20Errors"},"evmVersion":"london","libraries":{}},"sources":{"contracts/zevm/ZRC20.sol":{"keccak256":"0x968ad4d26d5711350651fd626e09f2ccf85fff5548cf6a037f5db6a700a689cc","urls":["bzz-raw://52c451104d1732d88d8ce60427b4eec969416843348869eacfbd4e9b9a74b36e","dweb:/ipfs/QmRvTPCXhPHFvEUK8XpfcpgcuM9DGdne634Y5t4rR3w8Mi"],"license":"MIT"},"contracts/zevm/interfaces/ISystem.sol":{"keccak256":"0x5602e9af1bd4645ed3e9988b4a2039e86b57e5901903d16fde8dce2d05d0f1df","urls":["bzz-raw://a8a348733bc0d6d8237de64bc006cbfb8390b4ad5a31f76c7a465b5c0036636d","dweb:/ipfs/QmeXKD9fRzg7tYYuf2oSwyu8Rwh86NVTZbuTFecVfX9X9u"],"license":"MIT"},"contracts/zevm/interfaces/IZRC20.sol":{"keccak256":"0x2118098ec6a745f69358649d011f0cba691f86c586b3a6f0bcbea16d9753f6e8","urls":["bzz-raw://ddacdf1f3681f936f80ef0102cdac2aa1b4d60c751a1c23d7f3a45f969346cdf","dweb:/ipfs/Qma7wpw8JwBSNJeob4KHGjKtXbtvW2FoThJJrDb8vtXz7X"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"contracts/zevm/ZRC20.sol","id":4341,"exportedSymbols":{"CoinType":[4903],"ISystem":[4618],"IZRC20":[4825],"IZRC20Metadata":[4844],"ZRC20":[4340],"ZRC20Errors":[3484],"ZRC20Events":[4898]},"nodeType":"SourceUnit","src":"32:12113:11","nodes":[{"id":3464,"nodeType":"PragmaDirective","src":"32:23:11","nodes":[],"literals":["solidity","0.8",".26"]},{"id":3465,"nodeType":"ImportDirective","src":"57:53:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/ISystem.sol","file":"../../contracts/zevm/interfaces/ISystem.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4619,"symbolAliases":[],"unitAlias":""},{"id":3466,"nodeType":"ImportDirective","src":"111:52:11","nodes":[],"absolutePath":"contracts/zevm/interfaces/IZRC20.sol","file":"../../contracts/zevm/interfaces/IZRC20.sol","nameLocation":"-1:-1:-1","scope":4341,"sourceUnit":4904,"symbolAliases":[],"unitAlias":""},{"id":3484,"nodeType":"ContractDefinition","src":"205:316:11","nodes":[{"id":3469,"nodeType":"ErrorDefinition","src":"298:34:11","nodes":[],"errorSelector":"2b2add3d","name":"CallerIsNotFungibleModule","nameLocation":"304:25:11","parameters":{"id":3468,"nodeType":"ParameterList","parameters":[],"src":"329:2:11"}},{"id":3471,"nodeType":"ErrorDefinition","src":"337:22:11","nodes":[],"errorSelector":"ddb5de5e","name":"InvalidSender","nameLocation":"343:13:11","parameters":{"id":3470,"nodeType":"ParameterList","parameters":[],"src":"356:2:11"}},{"id":3473,"nodeType":"ErrorDefinition","src":"364:29:11","nodes":[],"errorSelector":"0a7cd6d6","name":"GasFeeTransferFailed","nameLocation":"370:20:11","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"390:2:11"}},{"id":3475,"nodeType":"ErrorDefinition","src":"398:20:11","nodes":[],"errorSelector":"78fff396","name":"ZeroGasCoin","nameLocation":"404:11:11","parameters":{"id":3474,"nodeType":"ParameterList","parameters":[],"src":"415:2:11"}},{"id":3477,"nodeType":"ErrorDefinition","src":"423:21:11","nodes":[],"errorSelector":"e661aed0","name":"ZeroGasPrice","nameLocation":"429:12:11","parameters":{"id":3476,"nodeType":"ParameterList","parameters":[],"src":"441:2:11"}},{"id":3479,"nodeType":"ErrorDefinition","src":"449:21:11","nodes":[],"errorSelector":"10bad147","name":"LowAllowance","nameLocation":"455:12:11","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"467:2:11"}},{"id":3481,"nodeType":"ErrorDefinition","src":"475:19:11","nodes":[],"errorSelector":"fe382aa7","name":"LowBalance","nameLocation":"481:10:11","parameters":{"id":3480,"nodeType":"ParameterList","parameters":[],"src":"491:2:11"}},{"id":3483,"nodeType":"ErrorDefinition","src":"499:20:11","nodes":[],"errorSelector":"d92e233d","name":"ZeroAddress","nameLocation":"505:11:11","parameters":{"id":3482,"nodeType":"ParameterList","parameters":[],"src":"516:2:11"}}],"abstract":false,"baseContracts":[],"canonicalName":"ZRC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":3467,"nodeType":"StructuredDocumentation","src":"165:39:11","text":" @dev Custom errors for ZRC20"},"fullyImplemented":true,"linearizedBaseContracts":[3484],"name":"ZRC20Errors","nameLocation":"215:11:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[]},{"id":4340,"nodeType":"ContractDefinition","src":"704:11440:11","nodes":[{"id":3494,"nodeType":"VariableDeclaration","src":"855:92:11","nodes":[],"constant":true,"documentation":{"id":3491,"nodeType":"StructuredDocumentation","src":"769:81:11","text":"@notice Fungible address is always the same, maintained at the protocol level"},"functionSelector":"3ce4a5bc","mutability":"constant","name":"FUNGIBLE_MODULE_ADDRESS","nameLocation":"879:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3492,"name":"address","nodeType":"ElementaryTypeName","src":"855:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307837333562313442423739343633333037414163424544383644416633333232423165363232366142","id":3493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"905:42:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x735b14BB79463307AAcBED86DAf3322B1e6226aB"},"visibility":"public"},{"id":3497,"nodeType":"VariableDeclaration","src":"982:33:11","nodes":[],"constant":false,"documentation":{"id":3495,"nodeType":"StructuredDocumentation","src":"953:24:11","text":"@notice Chain id.abi"},"functionSelector":"85e1f4d0","mutability":"immutable","name":"CHAIN_ID","nameLocation":"1007:8:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3496,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3501,"nodeType":"VariableDeclaration","src":"1073:35:11","nodes":[],"constant":false,"documentation":{"id":3498,"nodeType":"StructuredDocumentation","src":"1021:47:11","text":"@notice Coin type, checkout Interfaces.sol."},"functionSelector":"a3413d03","mutability":"immutable","name":"COIN_TYPE","nameLocation":"1099:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3500,"nodeType":"UserDefinedTypeName","pathNode":{"id":3499,"name":"CoinType","nameLocations":["1073:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"1073:8:11"},"referencedDeclaration":4903,"src":"1073:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"public"},{"id":3504,"nodeType":"VariableDeclaration","src":"1234:38:11","nodes":[],"constant":false,"documentation":{"id":3502,"nodeType":"StructuredDocumentation","src":"1114:115:11","text":"@notice System contract address.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"f2441b32","mutability":"mutable","name":"SYSTEM_CONTRACT_ADDRESS","nameLocation":"1249:23:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3503,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3507,"nodeType":"VariableDeclaration","src":"1384:24:11","nodes":[],"baseFunctions":[4814],"constant":false,"documentation":{"id":3505,"nodeType":"StructuredDocumentation","src":"1278:101:11","text":"@notice Gas limit.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"091d2788","mutability":"mutable","name":"GAS_LIMIT","nameLocation":"1399:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3506,"name":"uint256","nodeType":"ElementaryTypeName","src":"1384:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3511,"nodeType":"VariableDeclaration","src":"1528:41:11","nodes":[],"baseFunctions":[4808],"constant":false,"documentation":{"id":3508,"nodeType":"StructuredDocumentation","src":"1414:109:11","text":"@notice Protocol flat fee.\n @dev Name is in upper case to maintain compatibility with ZRC20.sol v1"},"functionSelector":"4d8943bb","mutability":"mutable","name":"PROTOCOL_FLAT_FEE","nameLocation":"1552:17:11","overrides":{"id":3510,"nodeType":"OverrideSpecifier","overrides":[],"src":"1543:8:11"},"scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":3515,"nodeType":"VariableDeclaration","src":"1576:45:11","nodes":[],"constant":false,"mutability":"mutable","name":"_balances","nameLocation":"1612:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3514,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3512,"name":"address","nodeType":"ElementaryTypeName","src":"1584:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1576:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3513,"name":"uint256","nodeType":"ElementaryTypeName","src":"1595:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"id":3521,"nodeType":"VariableDeclaration","src":"1627:67:11","nodes":[],"constant":false,"mutability":"mutable","name":"_allowances","nameLocation":"1683:11:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3520,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3516,"name":"address","nodeType":"ElementaryTypeName","src":"1635:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1627:47:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3519,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":3517,"name":"address","nodeType":"ElementaryTypeName","src":"1654:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1646:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"id":3523,"nodeType":"VariableDeclaration","src":"1700:28:11","nodes":[],"constant":false,"mutability":"mutable","name":"_totalSupply","nameLocation":"1716:12:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3522,"name":"uint256","nodeType":"ElementaryTypeName","src":"1700:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":3525,"nodeType":"VariableDeclaration","src":"1734:20:11","nodes":[],"constant":false,"mutability":"mutable","name":"_name","nameLocation":"1749:5:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3524,"name":"string","nodeType":"ElementaryTypeName","src":"1734:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3527,"nodeType":"VariableDeclaration","src":"1760:22:11","nodes":[],"constant":false,"mutability":"mutable","name":"_symbol","nameLocation":"1775:7:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3526,"name":"string","nodeType":"ElementaryTypeName","src":"1760:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"id":3529,"nodeType":"VariableDeclaration","src":"1788:23:11","nodes":[],"constant":false,"mutability":"mutable","name":"_decimals","nameLocation":"1802:9:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3528,"name":"uint8","nodeType":"ElementaryTypeName","src":"1788:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"id":3532,"nodeType":"VariableDeclaration","src":"1958:29:11","nodes":[],"constant":false,"documentation":{"id":3530,"nodeType":"StructuredDocumentation","src":"1818:135:11","text":"@notice Gateway contract address.\n @dev This variable is added at last position to maintain storage layout with ZRC20.sol v1"},"functionSelector":"8b851b95","mutability":"mutable","name":"gatewayAddress","nameLocation":"1973:14:11","scope":4340,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3531,"name":"address","nodeType":"ElementaryTypeName","src":"1958:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":3541,"nodeType":"FunctionDefinition","src":"1994:96:11","nodes":[],"body":{"id":3540,"nodeType":"Block","src":"2056:34:11","nodes":[],"statements":[{"expression":{"expression":{"id":3537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2073:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2077:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2073:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3536,"id":3539,"nodeType":"Return","src":"2066:17:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"2003:10:11","parameters":{"id":3533,"nodeType":"ParameterList","parameters":[],"src":"2013:2:11"},"returnParameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3541,"src":"2047:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3534,"name":"address","nodeType":"ElementaryTypeName","src":"2047:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2046:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":3554,"nodeType":"ModifierDefinition","src":"2155:129:11","nodes":[],"body":{"id":3553,"nodeType":"Block","src":"2179:105:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3544,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2193:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2197:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2193:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3546,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2207:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2193:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3551,"nodeType":"IfStatement","src":"2189:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3548,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2239:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2239:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3550,"nodeType":"RevertStatement","src":"2232:34:11"}},{"id":3552,"nodeType":"PlaceholderStatement","src":"2276:1:11"}]},"documentation":{"id":3542,"nodeType":"StructuredDocumentation","src":"2096:54:11","text":" @dev Only fungible module modifier."},"name":"onlyFungible","nameLocation":"2164:12:11","parameters":{"id":3543,"nodeType":"ParameterList","parameters":[],"src":"2176:2:11"},"virtual":false,"visibility":"internal"},{"id":3633,"nodeType":"FunctionDefinition","src":"2380:728:11","nodes":[],"body":{"id":3632,"nodeType":"Block","src":"2637:471:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3575,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2651:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2655:6:11","memberName":"sender","nodeType":"MemberAccess","src":"2651:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3577,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"2665:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2651:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3582,"nodeType":"IfStatement","src":"2647:77:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3579,"name":"CallerIsNotFungibleModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"2697:25:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2697:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3581,"nodeType":"RevertStatement","src":"2690:34:11"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3583,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"2738:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2772:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2764:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3584,"name":"address","nodeType":"ElementaryTypeName","src":"2764:7:11","typeDescriptions":{}}},"id":3587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2764:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2738:36:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3589,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"2778:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2805:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2797:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3590,"name":"address","nodeType":"ElementaryTypeName","src":"2797:7:11","typeDescriptions":{}}},"id":3593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2797:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2778:29:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2738:69:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3599,"nodeType":"IfStatement","src":"2734:95:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3596,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"2816:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2816:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3598,"nodeType":"RevertStatement","src":"2809:20:11"}},{"expression":{"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3600,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"2839:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3601,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"2847:5:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2839:13:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3603,"nodeType":"ExpressionStatement","src":"2839:13:11"},{"expression":{"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3604,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"2862:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3605,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3559,"src":"2872:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2862:17:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3607,"nodeType":"ExpressionStatement","src":"2862:17:11"},{"expression":{"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3608,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"2889:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3609,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3561,"src":"2901:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2889:21:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":3611,"nodeType":"ExpressionStatement","src":"2889:21:11"},{"expression":{"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3612,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"2920:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3613,"name":"chainid_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"2931:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2920:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3615,"nodeType":"ExpressionStatement","src":"2920:19:11"},{"expression":{"id":3618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3616,"name":"COIN_TYPE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"2949:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3617,"name":"coinType_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3566,"src":"2961:9:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"src":"2949:21:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"id":3619,"nodeType":"ExpressionStatement","src":"2949:21:11"},{"expression":{"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3620,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"2980:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3621,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"2992:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2980:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3623,"nodeType":"ExpressionStatement","src":"2980:21:11"},{"expression":{"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3624,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"3011:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3625,"name":"systemContractAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"3037:22:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3011:48:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3627,"nodeType":"ExpressionStatement","src":"3011:48:11"},{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3628,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"3069:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3629,"name":"gatewayAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"3086:15:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3069:32:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3631,"nodeType":"ExpressionStatement","src":"3069:32:11"}]},"documentation":{"id":3555,"nodeType":"StructuredDocumentation","src":"2290:85:11","text":" @dev The only one allowed to deploy new ZRC20 is fungible address."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3557,"mutability":"mutable","name":"name_","nameLocation":"2415:5:11","nodeType":"VariableDeclaration","scope":3633,"src":"2401:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3556,"name":"string","nodeType":"ElementaryTypeName","src":"2401:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3559,"mutability":"mutable","name":"symbol_","nameLocation":"2444:7:11","nodeType":"VariableDeclaration","scope":3633,"src":"2430:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3558,"name":"string","nodeType":"ElementaryTypeName","src":"2430:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3561,"mutability":"mutable","name":"decimals_","nameLocation":"2467:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2461:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3560,"name":"uint8","nodeType":"ElementaryTypeName","src":"2461:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3563,"mutability":"mutable","name":"chainid_","nameLocation":"2494:8:11","nodeType":"VariableDeclaration","scope":3633,"src":"2486:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"2486:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3566,"mutability":"mutable","name":"coinType_","nameLocation":"2521:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2512:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"},"typeName":{"id":3565,"nodeType":"UserDefinedTypeName","pathNode":{"id":3564,"name":"CoinType","nameLocations":["2512:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":4903,"src":"2512:8:11"},"referencedDeclaration":4903,"src":"2512:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_CoinType_$4903","typeString":"enum CoinType"}},"visibility":"internal"},{"constant":false,"id":3568,"mutability":"mutable","name":"gasLimit_","nameLocation":"2548:9:11","nodeType":"VariableDeclaration","scope":3633,"src":"2540:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3567,"name":"uint256","nodeType":"ElementaryTypeName","src":"2540:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3570,"mutability":"mutable","name":"systemContractAddress_","nameLocation":"2575:22:11","nodeType":"VariableDeclaration","scope":3633,"src":"2567:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3569,"name":"address","nodeType":"ElementaryTypeName","src":"2567:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3572,"mutability":"mutable","name":"gatewayAddress_","nameLocation":"2615:15:11","nodeType":"VariableDeclaration","scope":3633,"src":"2607:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3571,"name":"address","nodeType":"ElementaryTypeName","src":"2607:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2391:245:11"},"returnParameters":{"id":3574,"nodeType":"ParameterList","parameters":[],"src":"2637:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":3643,"nodeType":"FunctionDefinition","src":"3183:98:11","nodes":[],"body":{"id":3642,"nodeType":"Block","src":"3252:29:11","nodes":[],"statements":[{"expression":{"id":3640,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3269:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3639,"id":3641,"nodeType":"Return","src":"3262:12:11"}]},"baseFunctions":[4833],"documentation":{"id":3634,"nodeType":"StructuredDocumentation","src":"3114:64:11","text":" @dev ZRC20 name\n @return name as string"},"functionSelector":"06fdde03","implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"3192:4:11","overrides":{"id":3636,"nodeType":"OverrideSpecifier","overrides":[],"src":"3219:8:11"},"parameters":{"id":3635,"nodeType":"ParameterList","parameters":[],"src":"3196:2:11"},"returnParameters":{"id":3639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3643,"src":"3237:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3637,"name":"string","nodeType":"ElementaryTypeName","src":"3237:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3236:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3657,"nodeType":"FunctionDefinition","src":"3363:103:11","nodes":[],"body":{"id":3656,"nodeType":"Block","src":"3434:32:11","nodes":[],"statements":[{"expression":{"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3652,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"3444:5:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3653,"name":"newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"3452:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3444:15:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3655,"nodeType":"ExpressionStatement","src":"3444:15:11"}]},"baseFunctions":[4819],"documentation":{"id":3644,"nodeType":"StructuredDocumentation","src":"3287:71:11","text":" @dev Name can be updated by fungible module account."},"functionSelector":"c47f0027","implemented":true,"kind":"function","modifiers":[{"id":3650,"kind":"modifierInvocation","modifierName":{"id":3649,"name":"onlyFungible","nameLocations":["3421:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3421:12:11"},"nodeType":"ModifierInvocation","src":"3421:12:11"}],"name":"setName","nameLocation":"3372:7:11","overrides":{"id":3648,"nodeType":"OverrideSpecifier","overrides":[],"src":"3412:8:11"},"parameters":{"id":3647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3646,"mutability":"mutable","name":"newName","nameLocation":"3394:7:11","nodeType":"VariableDeclaration","scope":3657,"src":"3380:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3645,"name":"string","nodeType":"ElementaryTypeName","src":"3380:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3379:23:11"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"3434:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3671,"nodeType":"FunctionDefinition","src":"3550:111:11","nodes":[],"body":{"id":3670,"nodeType":"Block","src":"3625:36:11","nodes":[],"statements":[{"expression":{"id":3668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3666,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3635:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3667,"name":"newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3660,"src":"3645:9:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3635:19:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3669,"nodeType":"ExpressionStatement","src":"3635:19:11"}]},"baseFunctions":[4824],"documentation":{"id":3658,"nodeType":"StructuredDocumentation","src":"3472:73:11","text":" @dev Symbol can be updated by fungible module account."},"functionSelector":"b84c8246","implemented":true,"kind":"function","modifiers":[{"id":3664,"kind":"modifierInvocation","modifierName":{"id":3663,"name":"onlyFungible","nameLocations":["3612:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"3612:12:11"},"nodeType":"ModifierInvocation","src":"3612:12:11"}],"name":"setSymbol","nameLocation":"3559:9:11","overrides":{"id":3662,"nodeType":"OverrideSpecifier","overrides":[],"src":"3603:8:11"},"parameters":{"id":3661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3660,"mutability":"mutable","name":"newSymbol","nameLocation":"3583:9:11","nodeType":"VariableDeclaration","scope":3671,"src":"3569:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3659,"name":"string","nodeType":"ElementaryTypeName","src":"3569:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3568:25:11"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"3625:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3681,"nodeType":"FunctionDefinition","src":"3742:102:11","nodes":[],"body":{"id":3680,"nodeType":"Block","src":"3813:31:11","nodes":[],"statements":[{"expression":{"id":3678,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"3830:7:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3677,"id":3679,"nodeType":"Return","src":"3823:14:11"}]},"baseFunctions":[4838],"documentation":{"id":3672,"nodeType":"StructuredDocumentation","src":"3667:70:11","text":" @dev ZRC20 symbol.\n @return symbol as string."},"functionSelector":"95d89b41","implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"3751:6:11","overrides":{"id":3674,"nodeType":"OverrideSpecifier","overrides":[],"src":"3780:8:11"},"parameters":{"id":3673,"nodeType":"ParameterList","parameters":[],"src":"3757:2:11"},"returnParameters":{"id":3677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3681,"src":"3798:13:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3675,"name":"string","nodeType":"ElementaryTypeName","src":"3798:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3797:15:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3691,"nodeType":"FunctionDefinition","src":"3933:98:11","nodes":[],"body":{"id":3690,"nodeType":"Block","src":"3998:33:11","nodes":[],"statements":[{"expression":{"id":3688,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3529,"src":"4015:9:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":3687,"id":3689,"nodeType":"Return","src":"4008:16:11"}]},"baseFunctions":[4843],"documentation":{"id":3682,"nodeType":"StructuredDocumentation","src":"3850:78:11","text":" @dev ZRC20 decimals.\n @return returns uint8 decimals."},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3942:8:11","overrides":{"id":3684,"nodeType":"OverrideSpecifier","overrides":[],"src":"3973:8:11"},"parameters":{"id":3683,"nodeType":"ParameterList","parameters":[],"src":"3950:2:11"},"returnParameters":{"id":3687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3691,"src":"3991:5:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3685,"name":"uint8","nodeType":"ElementaryTypeName","src":"3991:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3990:7:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3701,"nodeType":"FunctionDefinition","src":"4130:106:11","nodes":[],"body":{"id":3700,"nodeType":"Block","src":"4200:36:11","nodes":[],"statements":[{"expression":{"id":3698,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"4217:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3697,"id":3699,"nodeType":"Return","src":"4210:19:11"}]},"baseFunctions":[4716],"documentation":{"id":3692,"nodeType":"StructuredDocumentation","src":"4037:88:11","text":" @dev ZRC20 total supply.\n @return returns uint256 total supply."},"functionSelector":"18160ddd","implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"4139:11:11","overrides":{"id":3694,"nodeType":"OverrideSpecifier","overrides":[],"src":"4173:8:11"},"parameters":{"id":3693,"nodeType":"ParameterList","parameters":[],"src":"4150:2:11"},"returnParameters":{"id":3697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3701,"src":"4191:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3695,"name":"uint256","nodeType":"ElementaryTypeName","src":"4191:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4190:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3715,"nodeType":"FunctionDefinition","src":"4418:125:11","nodes":[],"body":{"id":3714,"nodeType":"Block","src":"4501:42:11","nodes":[],"statements":[{"expression":{"baseExpression":{"id":3710,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"4518:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3712,"indexExpression":{"id":3711,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3704,"src":"4528:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4518:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3709,"id":3713,"nodeType":"Return","src":"4511:25:11"}]},"baseFunctions":[4723],"documentation":{"id":3702,"nodeType":"StructuredDocumentation","src":"4242:171:11","text":" @dev Returns ZRC20 balance of an account.\n @param account, account address for which balance is requested.\n @return uint256 account balance."},"functionSelector":"70a08231","implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"4427:9:11","overrides":{"id":3706,"nodeType":"OverrideSpecifier","overrides":[],"src":"4474:8:11"},"parameters":{"id":3705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"account","nameLocation":"4445:7:11","nodeType":"VariableDeclaration","scope":3715,"src":"4437:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3703,"name":"address","nodeType":"ElementaryTypeName","src":"4437:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4436:17:11"},"returnParameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3715,"src":"4492:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3707,"name":"uint256","nodeType":"ElementaryTypeName","src":"4492:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4491:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3736,"nodeType":"FunctionDefinition","src":"4741:172:11","nodes":[],"body":{"id":3735,"nodeType":"Block","src":"4833:80:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3727,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"4853:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4853:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3729,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"4867:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3730,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3720,"src":"4878:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3726,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"4843:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4843:42:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3732,"nodeType":"ExpressionStatement","src":"4843:42:11"},{"expression":{"hexValue":"74727565","id":3733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4902:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3725,"id":3734,"nodeType":"Return","src":"4895:11:11"}]},"baseFunctions":[4732],"documentation":{"id":3716,"nodeType":"StructuredDocumentation","src":"4549:187:11","text":" @dev Returns ZRC20 balance of an account.\n @param recipient, recipiuent address to which transfer is done.\n @return true/false if transfer succeeded/failed."},"functionSelector":"a9059cbb","implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4750:8:11","overrides":{"id":3722,"nodeType":"OverrideSpecifier","overrides":[],"src":"4809:8:11"},"parameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3718,"mutability":"mutable","name":"recipient","nameLocation":"4767:9:11","nodeType":"VariableDeclaration","scope":3736,"src":"4759:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3717,"name":"address","nodeType":"ElementaryTypeName","src":"4759:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3720,"mutability":"mutable","name":"amount","nameLocation":"4786:6:11","nodeType":"VariableDeclaration","scope":3736,"src":"4778:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4778:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4758:35:11"},"returnParameters":{"id":3725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3736,"src":"4827:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3723,"name":"bool","nodeType":"ElementaryTypeName","src":"4827:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4826:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3754,"nodeType":"FunctionDefinition","src":"5064:149:11","nodes":[],"body":{"id":3753,"nodeType":"Block","src":"5162:51:11","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":3747,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"5179:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3749,"indexExpression":{"id":3748,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3739,"src":"5191:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3751,"indexExpression":{"id":3750,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"5198:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5179:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3746,"id":3752,"nodeType":"Return","src":"5172:34:11"}]},"baseFunctions":[4741],"documentation":{"id":3737,"nodeType":"StructuredDocumentation","src":"4919:140:11","text":" @dev Returns token allowance from owner to spender.\n @param owner, owner address.\n @return uint256 allowance."},"functionSelector":"dd62ed3e","implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"5073:9:11","overrides":{"id":3743,"nodeType":"OverrideSpecifier","overrides":[],"src":"5135:8:11"},"parameters":{"id":3742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3739,"mutability":"mutable","name":"owner","nameLocation":"5091:5:11","nodeType":"VariableDeclaration","scope":3754,"src":"5083:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3738,"name":"address","nodeType":"ElementaryTypeName","src":"5083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"spender","nameLocation":"5106:7:11","nodeType":"VariableDeclaration","scope":3754,"src":"5098:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3740,"name":"address","nodeType":"ElementaryTypeName","src":"5098:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5082:32:11"},"returnParameters":{"id":3746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3754,"src":"5153:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3744,"name":"uint256","nodeType":"ElementaryTypeName","src":"5153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5152:9:11"},"scope":4340,"stateMutability":"view","virtual":true,"visibility":"public"},{"id":3775,"nodeType":"FunctionDefinition","src":"5417:166:11","nodes":[],"body":{"id":3774,"nodeType":"Block","src":"5506:77:11","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3766,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"5525:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5525:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3768,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3757,"src":"5539:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3759,"src":"5548:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3765,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"5516:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:39:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3771,"nodeType":"ExpressionStatement","src":"5516:39:11"},{"expression":{"hexValue":"74727565","id":3772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5572:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3764,"id":3773,"nodeType":"Return","src":"5565:11:11"}]},"baseFunctions":[4750],"documentation":{"id":3755,"nodeType":"StructuredDocumentation","src":"5219:193:11","text":" @dev Approves amount transferFrom for spender.\n @param spender, spender address.\n @param amount, amount to approve.\n @return true/false if succeeded/failed."},"functionSelector":"095ea7b3","implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"5426:7:11","overrides":{"id":3761,"nodeType":"OverrideSpecifier","overrides":[],"src":"5482:8:11"},"parameters":{"id":3760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"spender","nameLocation":"5442:7:11","nodeType":"VariableDeclaration","scope":3775,"src":"5434:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3756,"name":"address","nodeType":"ElementaryTypeName","src":"5434:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3759,"mutability":"mutable","name":"amount","nameLocation":"5459:6:11","nodeType":"VariableDeclaration","scope":3775,"src":"5451:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3758,"name":"uint256","nodeType":"ElementaryTypeName","src":"5451:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5433:33:11"},"returnParameters":{"id":3764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3775,"src":"5500:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3762,"name":"bool","nodeType":"ElementaryTypeName","src":"5500:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5499:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3822,"nodeType":"FunctionDefinition","src":"5831:388:11","nodes":[],"body":{"id":3821,"nodeType":"Block","src":"5943:276:11","nodes":[],"statements":[{"expression":{"arguments":[{"id":3789,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"5963:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3790,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3780,"src":"5971:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3791,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"5982:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3788,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"5953:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5953:36:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3793,"nodeType":"ExpressionStatement","src":"5953:36:11"},{"assignments":[3795],"declarations":[{"constant":false,"id":3795,"mutability":"mutable","name":"currentAllowance","nameLocation":"6008:16:11","nodeType":"VariableDeclaration","scope":3821,"src":"6000:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3794,"name":"uint256","nodeType":"ElementaryTypeName","src":"6000:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3802,"initialValue":{"baseExpression":{"baseExpression":{"id":3796,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"6027:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3798,"indexExpression":{"id":3797,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6039:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:19:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3801,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3799,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6047:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6047:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6027:33:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6000:60:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3803,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6074:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3804,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6093:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6074:25:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3809,"nodeType":"IfStatement","src":"6070:52:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3806,"name":"LowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3479,"src":"6108:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6108:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3808,"nodeType":"RevertStatement","src":"6101:21:11"}},{"expression":{"arguments":[{"id":3811,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3778,"src":"6142:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":3812,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"6150:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6150:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3814,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"6164:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"6183:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6164:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3810,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"6133:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6133:57:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3818,"nodeType":"ExpressionStatement","src":"6133:57:11"},{"expression":{"hexValue":"74727565","id":3819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6208:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3787,"id":3820,"nodeType":"Return","src":"6201:11:11"}]},"baseFunctions":[4761],"documentation":{"id":3776,"nodeType":"StructuredDocumentation","src":"5589:237:11","text":" @dev Transfers tokens from sender to recipient.\n @param sender, sender address.\n @param recipient, recipient address.\n @param amount, amount to transfer.\n @return true/false if succeeded/failed."},"functionSelector":"23b872dd","implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5840:12:11","overrides":{"id":3784,"nodeType":"OverrideSpecifier","overrides":[],"src":"5919:8:11"},"parameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3778,"mutability":"mutable","name":"sender","nameLocation":"5861:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3777,"name":"address","nodeType":"ElementaryTypeName","src":"5853:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3780,"mutability":"mutable","name":"recipient","nameLocation":"5877:9:11","nodeType":"VariableDeclaration","scope":3822,"src":"5869:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"5869:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"amount","nameLocation":"5896:6:11","nodeType":"VariableDeclaration","scope":3822,"src":"5888:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5888:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5852:51:11"},"returnParameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3822,"src":"5937:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3785,"name":"bool","nodeType":"ElementaryTypeName","src":"5937:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5936:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"id":3840,"nodeType":"FunctionDefinition","src":"6365:126:11","nodes":[],"body":{"id":3839,"nodeType":"Block","src":"6428:63:11","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":3832,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6444:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6448:6:11","memberName":"sender","nodeType":"MemberAccess","src":"6444:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3834,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3825,"src":"6456:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3831,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"6438:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6438:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3836,"nodeType":"ExpressionStatement","src":"6438:25:11"},{"expression":{"hexValue":"74727565","id":3837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6480:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3830,"id":3838,"nodeType":"Return","src":"6473:11:11"}]},"baseFunctions":[4777],"documentation":{"id":3823,"nodeType":"StructuredDocumentation","src":"6225:135:11","text":" @dev Burns an amount of tokens.\n @param amount, amount to burn.\n @return true/false if succeeded/failed."},"functionSelector":"42966c68","implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"6374:4:11","overrides":{"id":3827,"nodeType":"OverrideSpecifier","overrides":[],"src":"6404:8:11"},"parameters":{"id":3826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3825,"mutability":"mutable","name":"amount","nameLocation":"6387:6:11","nodeType":"VariableDeclaration","scope":3840,"src":"6379:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3824,"name":"uint256","nodeType":"ElementaryTypeName","src":"6379:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6378:16:11"},"returnParameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3840,"src":"6422:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3828,"name":"bool","nodeType":"ElementaryTypeName","src":"6422:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6421:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3903,"nodeType":"FunctionDefinition","src":"6497:462:11","nodes":[],"body":{"id":3902,"nodeType":"Block","src":"6584:375:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3849,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6598:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6616:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6608:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3850,"name":"address","nodeType":"ElementaryTypeName","src":"6608:7:11","typeDescriptions":{}}},"id":3853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6608:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6598:20:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3858,"nodeType":"IfStatement","src":"6594:46:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3855,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6627:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6627:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3857,"nodeType":"RevertStatement","src":"6620:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3859,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6654:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6675:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6667:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3860,"name":"address","nodeType":"ElementaryTypeName","src":"6667:7:11","typeDescriptions":{}}},"id":3863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6667:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6654:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3868,"nodeType":"IfStatement","src":"6650:49:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3865,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"6686:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6686:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3867,"nodeType":"RevertStatement","src":"6679:20:11"}},{"assignments":[3870],"declarations":[{"constant":false,"id":3870,"mutability":"mutable","name":"senderBalance","nameLocation":"6718:13:11","nodeType":"VariableDeclaration","scope":3902,"src":"6710:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3869,"name":"uint256","nodeType":"ElementaryTypeName","src":"6710:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3874,"initialValue":{"baseExpression":{"id":3871,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6734:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3873,"indexExpression":{"id":3872,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6744:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6734:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6710:41:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3875,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6765:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3876,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6781:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6765:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3881,"nodeType":"IfStatement","src":"6761:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3878,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"6796:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3880,"nodeType":"RevertStatement","src":"6789:19:11"}},{"expression":{"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3882,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6819:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3884,"indexExpression":{"id":3883,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6829:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6819:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3885,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3870,"src":"6839:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6855:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6839:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6819:42:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3889,"nodeType":"ExpressionStatement","src":"6819:42:11"},{"expression":{"id":3894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3890,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"6871:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3892,"indexExpression":{"id":3891,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6881:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6871:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3893,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6895:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6871:30:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3895,"nodeType":"ExpressionStatement","src":"6871:30:11"},{"eventCall":{"arguments":[{"id":3897,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"6926:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3898,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6934:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3899,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3846,"src":"6945:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3896,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"6917:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6917:35:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3901,"nodeType":"EmitStatement","src":"6912:40:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6506:9:11","parameters":{"id":3847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"sender","nameLocation":"6524:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6516:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3841,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3844,"mutability":"mutable","name":"recipient","nameLocation":"6540:9:11","nodeType":"VariableDeclaration","scope":3903,"src":"6532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3843,"name":"address","nodeType":"ElementaryTypeName","src":"6532:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3846,"mutability":"mutable","name":"amount","nameLocation":"6559:6:11","nodeType":"VariableDeclaration","scope":3903,"src":"6551:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3845,"name":"uint256","nodeType":"ElementaryTypeName","src":"6551:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6515:51:11"},"returnParameters":{"id":3848,"nodeType":"ParameterList","parameters":[],"src":"6584:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3940,"nodeType":"FunctionDefinition","src":"6965:252:11","nodes":[],"body":{"id":3939,"nodeType":"Block","src":"7030:187:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3910,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7044:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7063:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7055:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3911,"name":"address","nodeType":"ElementaryTypeName","src":"7055:7:11","typeDescriptions":{}}},"id":3914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7055:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7044:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3919,"nodeType":"IfStatement","src":"7040:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3916,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7074:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7074:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3918,"nodeType":"RevertStatement","src":"7067:20:11"}},{"expression":{"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3920,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7098:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3921,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7114:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7098:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3923,"nodeType":"ExpressionStatement","src":"7098:22:11"},{"expression":{"id":3928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3924,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7130:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3926,"indexExpression":{"id":3925,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7140:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7130:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3927,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7152:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7130:28:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3929,"nodeType":"ExpressionStatement","src":"7130:28:11"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":3933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7190:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7182:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"7182:7:11","typeDescriptions":{}}},"id":3934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7182:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3935,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"7194:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3936,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"7203:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3930,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7173:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7173:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3938,"nodeType":"EmitStatement","src":"7168:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"6974:5:11","parameters":{"id":3908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3905,"mutability":"mutable","name":"account","nameLocation":"6988:7:11","nodeType":"VariableDeclaration","scope":3940,"src":"6980:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3904,"name":"address","nodeType":"ElementaryTypeName","src":"6980:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3907,"mutability":"mutable","name":"amount","nameLocation":"7005:6:11","nodeType":"VariableDeclaration","scope":3940,"src":"6997:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3906,"name":"uint256","nodeType":"ElementaryTypeName","src":"6997:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6979:33:11"},"returnParameters":{"id":3909,"nodeType":"ParameterList","parameters":[],"src":"7030:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3992,"nodeType":"FunctionDefinition","src":"7223:381:11","nodes":[],"body":{"id":3991,"nodeType":"Block","src":"7288:316:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3947,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7302:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7321:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7313:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3948,"name":"address","nodeType":"ElementaryTypeName","src":"7313:7:11","typeDescriptions":{}}},"id":3951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7313:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7302:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3956,"nodeType":"IfStatement","src":"7298:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3953,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7332:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3955,"nodeType":"RevertStatement","src":"7325:20:11"}},{"assignments":[3958],"declarations":[{"constant":false,"id":3958,"mutability":"mutable","name":"accountBalance","nameLocation":"7364:14:11","nodeType":"VariableDeclaration","scope":3991,"src":"7356:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3957,"name":"uint256","nodeType":"ElementaryTypeName","src":"7356:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3962,"initialValue":{"baseExpression":{"id":3959,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7381:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3961,"indexExpression":{"id":3960,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7391:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7381:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7356:43:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3963,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7413:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3964,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7430:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7413:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3969,"nodeType":"IfStatement","src":"7409:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3966,"name":"LowBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3481,"src":"7445:10:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7445:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3968,"nodeType":"RevertStatement","src":"7438:19:11"}},{"expression":{"id":3976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3970,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3515,"src":"7468:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3972,"indexExpression":{"id":3971,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7478:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7468:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3973,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3958,"src":"7489:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3974,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7506:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7489:23:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7468:44:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3977,"nodeType":"ExpressionStatement","src":"7468:44:11"},{"expression":{"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3978,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3523,"src":"7522:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3979,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7538:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3981,"nodeType":"ExpressionStatement","src":"7522:22:11"},{"eventCall":{"arguments":[{"id":3983,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"7569:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":3986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7586:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7578:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3984,"name":"address","nodeType":"ElementaryTypeName","src":"7578:7:11","typeDescriptions":{}}},"id":3987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7578:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3988,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3944,"src":"7590:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3982,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"7560:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7560:37:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3990,"nodeType":"EmitStatement","src":"7555:42:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7232:5:11","parameters":{"id":3945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3942,"mutability":"mutable","name":"account","nameLocation":"7246:7:11","nodeType":"VariableDeclaration","scope":3992,"src":"7238:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3941,"name":"address","nodeType":"ElementaryTypeName","src":"7238:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3944,"mutability":"mutable","name":"amount","nameLocation":"7263:6:11","nodeType":"VariableDeclaration","scope":3992,"src":"7255:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3943,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7237:33:11"},"returnParameters":{"id":3946,"nodeType":"ParameterList","parameters":[],"src":"7288:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4036,"nodeType":"FunctionDefinition","src":"7610:296:11","nodes":[],"body":{"id":4035,"nodeType":"Block","src":"7693:213:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4001,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7707:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7724:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7716:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4002,"name":"address","nodeType":"ElementaryTypeName","src":"7716:7:11","typeDescriptions":{}}},"id":4005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7707:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4010,"nodeType":"IfStatement","src":"7703:45:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4007,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7735:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7735:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4009,"nodeType":"RevertStatement","src":"7728:20:11"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4011,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7762:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7781:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7773:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4012,"name":"address","nodeType":"ElementaryTypeName","src":"7773:7:11","typeDescriptions":{}}},"id":4015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7773:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7762:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4020,"nodeType":"IfStatement","src":"7758:47:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4017,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"7792:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7792:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4019,"nodeType":"RevertStatement","src":"7785:20:11"}},{"expression":{"id":4027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4021,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3521,"src":"7816:11:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":4024,"indexExpression":{"id":4022,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7828:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7816:18:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4025,"indexExpression":{"id":4023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7835:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7816:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4026,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7846:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7816:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4028,"nodeType":"ExpressionStatement","src":"7816:36:11"},{"eventCall":{"arguments":[{"id":4030,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3994,"src":"7876:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4031,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"7883:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3998,"src":"7892:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4029,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4861,"src":"7867:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":4033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7867:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4034,"nodeType":"EmitStatement","src":"7862:37:11"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7619:8:11","parameters":{"id":3999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3994,"mutability":"mutable","name":"owner","nameLocation":"7636:5:11","nodeType":"VariableDeclaration","scope":4036,"src":"7628:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3993,"name":"address","nodeType":"ElementaryTypeName","src":"7628:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"spender","nameLocation":"7651:7:11","nodeType":"VariableDeclaration","scope":4036,"src":"7643:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3995,"name":"address","nodeType":"ElementaryTypeName","src":"7643:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3998,"mutability":"mutable","name":"amount","nameLocation":"7668:6:11","nodeType":"VariableDeclaration","scope":4036,"src":"7660:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3997,"name":"uint256","nodeType":"ElementaryTypeName","src":"7660:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7627:48:11"},"returnParameters":{"id":4000,"nodeType":"ParameterList","parameters":[],"src":"7693:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":4082,"nodeType":"FunctionDefinition","src":"8150:396:11","nodes":[],"body":{"id":4081,"nodeType":"Block","src":"8228:318:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4047,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8255:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8259:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8255:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4049,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8269:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8255:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4051,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8296:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8300:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8296:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4053,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8310:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8296:37:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:78:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8353:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8357:6:11","memberName":"sender","nodeType":"MemberAccess","src":"8353:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4058,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"8367:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8353:28:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8255:126:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4064,"nodeType":"IfStatement","src":"8238:176:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4061,"name":"InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3471,"src":"8399:13:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8399:15:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4063,"nodeType":"RevertStatement","src":"8392:22:11"}},{"expression":{"arguments":[{"id":4066,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8430:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4067,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8434:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4065,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"8424:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8424:17:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4069,"nodeType":"ExpressionStatement","src":"8424:17:11"},{"eventCall":{"arguments":[{"arguments":[{"id":4073,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"8481:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4071,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8464:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8468:12:11","memberName":"encodePacked","nodeType":"MemberAccess","src":"8464:16:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8464:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4075,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4039,"src":"8507:2:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4041,"src":"8511:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4070,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"8456:7:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes memory,address,uint256)"}},"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8456:62:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4078,"nodeType":"EmitStatement","src":"8451:67:11"},{"expression":{"hexValue":"74727565","id":4079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8535:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4046,"id":4080,"nodeType":"Return","src":"8528:11:11"}]},"baseFunctions":[4770],"documentation":{"id":4037,"nodeType":"StructuredDocumentation","src":"7912:233:11","text":" @dev Deposits corresponding tokens from external chain, only callable by Fungible module.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"47e7ef24","implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"8159:7:11","overrides":{"id":4043,"nodeType":"OverrideSpecifier","overrides":[],"src":"8204:8:11"},"parameters":{"id":4042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4039,"mutability":"mutable","name":"to","nameLocation":"8175:2:11","nodeType":"VariableDeclaration","scope":4082,"src":"8167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4038,"name":"address","nodeType":"ElementaryTypeName","src":"8167:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4041,"mutability":"mutable","name":"amount","nameLocation":"8187:6:11","nodeType":"VariableDeclaration","scope":4082,"src":"8179:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4040,"name":"uint256","nodeType":"ElementaryTypeName","src":"8179:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8166:28:11"},"returnParameters":{"id":4046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4082,"src":"8222:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4044,"name":"bool","nodeType":"ElementaryTypeName","src":"8222:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8221:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4140,"nodeType":"FunctionDefinition","src":"8731:498:11","nodes":[],"body":{"id":4139,"nodeType":"Block","src":"8805:424:11","nodes":[],"statements":[{"assignments":[4092],"declarations":[{"constant":false,"id":4092,"mutability":"mutable","name":"gasZRC20","nameLocation":"8823:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8815:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"8815:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4099,"initialValue":{"arguments":[{"id":4097,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"8889:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4094,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8842:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4093,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8834:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8867:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"8834:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8815:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4100,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"8912:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8924:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4101,"name":"address","nodeType":"ElementaryTypeName","src":"8924:7:11","typeDescriptions":{}}},"id":4104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8924:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8912:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4109,"nodeType":"IfStatement","src":"8908:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4106,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"8943:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8943:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4108,"nodeType":"RevertStatement","src":"8936:20:11"}},{"assignments":[4111],"declarations":[{"constant":false,"id":4111,"mutability":"mutable","name":"gasPrice","nameLocation":"8975:8:11","nodeType":"VariableDeclaration","scope":4139,"src":"8967:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4110,"name":"uint256","nodeType":"ElementaryTypeName","src":"8967:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4118,"initialValue":{"arguments":[{"id":4116,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9037:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4113,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"8994:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4112,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"8986:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9019:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"8986:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8986:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8967:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9060:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9072:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9060:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4126,"nodeType":"IfStatement","src":"9056:65:11","trueBody":{"id":4125,"nodeType":"Block","src":"9075:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4122,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9096:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9096:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4124,"nodeType":"RevertStatement","src":"9089:21:11"}]}},{"assignments":[4128],"declarations":[{"constant":false,"id":4128,"mutability":"mutable","name":"gasFee","nameLocation":"9138:6:11","nodeType":"VariableDeclaration","scope":4139,"src":"9130:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4127,"name":"uint256","nodeType":"ElementaryTypeName","src":"9130:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4134,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4129,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"9147:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4130,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"9158:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4132,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9170:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9147:40:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9130:57:11"},{"expression":{"components":[{"id":4135,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"9205:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4136,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"9215:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4137,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9204:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4090,"id":4138,"nodeType":"Return","src":"9197:25:11"}]},"baseFunctions":[4793],"documentation":{"id":4083,"nodeType":"StructuredDocumentation","src":"8552:174:11","text":" @dev Withdraws gas fees.\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"d9eeebed","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFee","nameLocation":"8740:14:11","overrides":{"id":4085,"nodeType":"OverrideSpecifier","overrides":[],"src":"8769:8:11"},"parameters":{"id":4084,"nodeType":"ParameterList","parameters":[],"src":"8754:2:11"},"returnParameters":{"id":4090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8787:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4086,"name":"address","nodeType":"ElementaryTypeName","src":"8787:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"8796:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8796:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8786:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4200,"nodeType":"FunctionDefinition","src":"9437:525:11","nodes":[],"body":{"id":4199,"nodeType":"Block","src":"9539:423:11","nodes":[],"statements":[{"assignments":[4152],"declarations":[{"constant":false,"id":4152,"mutability":"mutable","name":"gasZRC20","nameLocation":"9557:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9549:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4151,"name":"address","nodeType":"ElementaryTypeName","src":"9549:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4159,"initialValue":{"arguments":[{"id":4157,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9623:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4154,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9576:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4153,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9568:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9601:21:11","memberName":"gasCoinZRC20ByChainId","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"9568:54:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_address_$","typeString":"function (uint256) view external returns (address)"}},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9568:64:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9549:83:11"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4160,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9646:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9666:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9658:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4161,"name":"address","nodeType":"ElementaryTypeName","src":"9658:7:11","typeDescriptions":{}}},"id":4164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9658:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9646:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4169,"nodeType":"IfStatement","src":"9642:48:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4166,"name":"ZeroGasCoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3475,"src":"9677:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9677:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4168,"nodeType":"RevertStatement","src":"9670:20:11"}},{"assignments":[4171],"declarations":[{"constant":false,"id":4171,"mutability":"mutable","name":"gasPrice","nameLocation":"9709:8:11","nodeType":"VariableDeclaration","scope":4199,"src":"9701:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"9701:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4178,"initialValue":{"arguments":[{"id":4176,"name":"CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"9771:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4173,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"9728:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4172,"name":"ISystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4618,"src":"9720:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystem_$4618_$","typeString":"type(contract ISystem)"}},"id":4174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:32:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystem_$4618","typeString":"contract ISystem"}},"id":4175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9753:17:11","memberName":"gasPriceByChainId","nodeType":"MemberAccess","referencedDeclaration":4603,"src":"9720:50:11","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":4177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9720:60:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9701:79:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4179,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9794:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9806:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9794:13:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4186,"nodeType":"IfStatement","src":"9790:65:11","trueBody":{"id":4185,"nodeType":"Block","src":"9809:46:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4182,"name":"ZeroGasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"9830:12:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9830:14:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4184,"nodeType":"RevertStatement","src":"9823:21:11"}]}},{"assignments":[4188],"declarations":[{"constant":false,"id":4188,"mutability":"mutable","name":"gasFee","nameLocation":"9872:6:11","nodeType":"VariableDeclaration","scope":4199,"src":"9864:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4187,"name":"uint256","nodeType":"ElementaryTypeName","src":"9864:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4194,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4189,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"9881:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4190,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4143,"src":"9892:8:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4192,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"9903:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9881:39:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9864:56:11"},{"expression":{"components":[{"id":4195,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4152,"src":"9938:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4196,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"9948:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9937:18:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":4150,"id":4198,"nodeType":"Return","src":"9930:25:11"}]},"baseFunctions":[4802],"documentation":{"id":4141,"nodeType":"StructuredDocumentation","src":"9235:197:11","text":" @dev Withdraws gas fees with specified gasLimit\n @return returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for\n withdraw()"},"functionSelector":"fc5fecd5","implemented":true,"kind":"function","modifiers":[],"name":"withdrawGasFeeWithGasLimit","nameLocation":"9446:26:11","overrides":{"id":4145,"nodeType":"OverrideSpecifier","overrides":[],"src":"9503:8:11"},"parameters":{"id":4144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"mutability":"mutable","name":"gasLimit","nameLocation":"9481:8:11","nodeType":"VariableDeclaration","scope":4200,"src":"9473:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4142,"name":"uint256","nodeType":"ElementaryTypeName","src":"9473:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9472:18:11"},"returnParameters":{"id":4150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9521:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4146,"name":"address","nodeType":"ElementaryTypeName","src":"9521:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4200,"src":"9530:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4148,"name":"uint256","nodeType":"ElementaryTypeName","src":"9530:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9520:18:11"},"scope":4340,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":4251,"nodeType":"FunctionDefinition","src":"10352:430:11","nodes":[],"body":{"id":4250,"nodeType":"Block","src":"10436:346:11","nodes":[],"statements":[{"assignments":[4212,4214],"declarations":[{"constant":false,"id":4212,"mutability":"mutable","name":"gasZRC20","nameLocation":"10455:8:11","nodeType":"VariableDeclaration","scope":4250,"src":"10447:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4211,"name":"address","nodeType":"ElementaryTypeName","src":"10447:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4214,"mutability":"mutable","name":"gasFee","nameLocation":"10473:6:11","nodeType":"VariableDeclaration","scope":4250,"src":"10465:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4213,"name":"uint256","nodeType":"ElementaryTypeName","src":"10465:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":4215,"name":"withdrawGasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4140,"src":"10483:14:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$_t_uint256_$","typeString":"function () view returns (address,uint256)"}},"id":4216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10483:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10446:53:11"},{"condition":{"id":4227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10513:75:11","subExpression":{"arguments":[{"expression":{"id":4222,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10544:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10548:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10544:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4224,"name":"FUNGIBLE_MODULE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3494,"src":"10556:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4225,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10581:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":4219,"name":"gasZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4212,"src":"10521:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4218,"name":"IZRC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4825,"src":"10514:6:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZRC20_$4825_$","typeString":"type(contract IZRC20)"}},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:16:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZRC20_$4825","typeString":"contract IZRC20"}},"id":4221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10531:12:11","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4761,"src":"10514:29:11","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":4226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10514:74:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4232,"nodeType":"IfStatement","src":"10509:135:11","trueBody":{"id":4231,"nodeType":"Block","src":"10590:54:11","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4228,"name":"GasFeeTransferFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3473,"src":"10611:20:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10611:22:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4230,"nodeType":"RevertStatement","src":"10604:29:11"}]}},{"expression":{"arguments":[{"expression":{"id":4234,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10659:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10663:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10659:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4236,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10671:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4233,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"10653:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":4237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10653:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4238,"nodeType":"ExpressionStatement","src":"10653:25:11"},{"eventCall":{"arguments":[{"expression":{"id":4240,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10704:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10708:6:11","memberName":"sender","nodeType":"MemberAccess","src":"10704:10:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4242,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"10716:2:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":4243,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4205,"src":"10720:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4244,"name":"gasFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"10728:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4245,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"10736:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4239,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"10693:10:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,bytes memory,uint256,uint256,uint256)"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:61:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4247,"nodeType":"EmitStatement","src":"10688:66:11"},{"expression":{"hexValue":"74727565","id":4248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10771:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":4210,"id":4249,"nodeType":"Return","src":"10764:11:11"}]},"baseFunctions":[4786],"documentation":{"id":4201,"nodeType":"StructuredDocumentation","src":"9968:379:11","text":" @dev Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the\n outbound chain\n this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.\n @param to, recipient address.\n @param amount, amount to deposit.\n @return true/false if succeeded/failed."},"functionSelector":"c7012626","implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"10361:8:11","overrides":{"id":4207,"nodeType":"OverrideSpecifier","overrides":[],"src":"10412:8:11"},"parameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4203,"mutability":"mutable","name":"to","nameLocation":"10383:2:11","nodeType":"VariableDeclaration","scope":4251,"src":"10370:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4202,"name":"bytes","nodeType":"ElementaryTypeName","src":"10370:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"amount","nameLocation":"10395:6:11","nodeType":"VariableDeclaration","scope":4251,"src":"10387:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4204,"name":"uint256","nodeType":"ElementaryTypeName","src":"10387:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10369:33:11"},"returnParameters":{"id":4210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4251,"src":"10430:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4208,"name":"bool","nodeType":"ElementaryTypeName","src":"10430:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10429:6:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4278,"nodeType":"FunctionDefinition","src":"10942:216:11","nodes":[],"body":{"id":4277,"nodeType":"Block","src":"11015:143:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4259,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11029:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11045:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11037:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4260,"name":"address","nodeType":"ElementaryTypeName","src":"11037:7:11","typeDescriptions":{}}},"id":4263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11037:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11029:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4268,"nodeType":"IfStatement","src":"11025:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4265,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11056:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11056:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4267,"nodeType":"RevertStatement","src":"11049:20:11"}},{"expression":{"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4269,"name":"SYSTEM_CONTRACT_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3504,"src":"11079:23:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4270,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11105:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11079:30:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4272,"nodeType":"ExpressionStatement","src":"11079:30:11"},{"eventCall":{"arguments":[{"id":4274,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"11146:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4273,"name":"UpdatedSystemContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4885,"src":"11124:21:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11124:27:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4276,"nodeType":"EmitStatement","src":"11119:32:11"}]},"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"10788:149:11","text":" @dev Updates system contract address. Can only be updated by the fungible module.\n @param addr, new system contract address."},"functionSelector":"c835d7cc","implemented":true,"kind":"function","modifiers":[{"id":4257,"kind":"modifierInvocation","modifierName":{"id":4256,"name":"onlyFungible","nameLocations":["11002:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11002:12:11"},"nodeType":"ModifierInvocation","src":"11002:12:11"}],"name":"updateSystemContractAddress","nameLocation":"10951:27:11","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"addr","nameLocation":"10987:4:11","nodeType":"VariableDeclaration","scope":4278,"src":"10979:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4253,"name":"address","nodeType":"ElementaryTypeName","src":"10979:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10978:14:11"},"returnParameters":{"id":4258,"nodeType":"ParameterList","parameters":[],"src":"11015:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4305,"nodeType":"FunctionDefinition","src":"11320:193:11","nodes":[],"body":{"id":4304,"nodeType":"Block","src":"11386:127:11","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":4291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4286,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11400:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":4289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11416:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":4288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11408:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4287,"name":"address","nodeType":"ElementaryTypeName","src":"11408:7:11","typeDescriptions":{}}},"id":4290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11408:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11400:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4295,"nodeType":"IfStatement","src":"11396:44:11","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4292,"name":"ZeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3483,"src":"11427:11:11","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11427:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4294,"nodeType":"RevertStatement","src":"11420:20:11"}},{"expression":{"id":4298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4296,"name":"gatewayAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"11450:14:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4297,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11467:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11450:21:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4299,"nodeType":"ExpressionStatement","src":"11450:21:11"},{"eventCall":{"arguments":[{"id":4301,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4281,"src":"11501:4:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4300,"name":"UpdatedGateway","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4889,"src":"11486:14:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11486:20:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4303,"nodeType":"EmitStatement","src":"11481:25:11"}]},"documentation":{"id":4279,"nodeType":"StructuredDocumentation","src":"11164:151:11","text":" @dev Updates gateway contract address. Can only be updated by the fungible module.\n @param addr, new gateway contract address."},"functionSelector":"ccc77599","implemented":true,"kind":"function","modifiers":[{"id":4284,"kind":"modifierInvocation","modifierName":{"id":4283,"name":"onlyFungible","nameLocations":["11373:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11373:12:11"},"nodeType":"ModifierInvocation","src":"11373:12:11"}],"name":"updateGatewayAddress","nameLocation":"11329:20:11","parameters":{"id":4282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4281,"mutability":"mutable","name":"addr","nameLocation":"11358:4:11","nodeType":"VariableDeclaration","scope":4305,"src":"11350:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4280,"name":"address","nodeType":"ElementaryTypeName","src":"11350:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11349:14:11"},"returnParameters":{"id":4285,"nodeType":"ParameterList","parameters":[],"src":"11386:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4322,"nodeType":"FunctionDefinition","src":"11650:144:11","nodes":[],"body":{"id":4321,"nodeType":"Block","src":"11715:79:11","nodes":[],"statements":[{"expression":{"id":4315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4313,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11725:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4314,"name":"gasLimit_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4308,"src":"11737:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11725:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4316,"nodeType":"ExpressionStatement","src":"11725:21:11"},{"eventCall":{"arguments":[{"id":4318,"name":"GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"11777:9:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4317,"name":"UpdatedGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"11761:15:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11761:26:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4320,"nodeType":"EmitStatement","src":"11756:31:11"}]},"documentation":{"id":4306,"nodeType":"StructuredDocumentation","src":"11519:126:11","text":" @dev Updates gas limit. Can only be updated by the fungible module.\n @param gasLimit_, new gas limit."},"functionSelector":"f687d12a","implemented":true,"kind":"function","modifiers":[{"id":4311,"kind":"modifierInvocation","modifierName":{"id":4310,"name":"onlyFungible","nameLocations":["11702:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"11702:12:11"},"nodeType":"ModifierInvocation","src":"11702:12:11"}],"name":"updateGasLimit","nameLocation":"11659:14:11","parameters":{"id":4309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4308,"mutability":"mutable","name":"gasLimit_","nameLocation":"11682:9:11","nodeType":"VariableDeclaration","scope":4322,"src":"11674:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4307,"name":"uint256","nodeType":"ElementaryTypeName","src":"11674:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11673:19:11"},"returnParameters":{"id":4312,"nodeType":"ParameterList","parameters":[],"src":"11715:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":4339,"nodeType":"FunctionDefinition","src":"11954:188:11","nodes":[],"body":{"id":4338,"nodeType":"Block","src":"12033:109:11","nodes":[],"statements":[{"expression":{"id":4332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4330,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12043:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4331,"name":"protocolFlatFee_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"12063:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12043:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4333,"nodeType":"ExpressionStatement","src":"12043:36:11"},{"eventCall":{"arguments":[{"id":4335,"name":"PROTOCOL_FLAT_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3511,"src":"12117:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4334,"name":"UpdatedProtocolFlatFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4897,"src":"12094:22:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":4336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12094:41:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4337,"nodeType":"EmitStatement","src":"12089:46:11"}]},"documentation":{"id":4323,"nodeType":"StructuredDocumentation","src":"11800:149:11","text":" @dev Updates protocol flat fee. Can only be updated by the fungible module.\n @param protocolFlatFee_, new protocol flat fee."},"functionSelector":"eddeb123","implemented":true,"kind":"function","modifiers":[{"id":4328,"kind":"modifierInvocation","modifierName":{"id":4327,"name":"onlyFungible","nameLocations":["12020:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":3554,"src":"12020:12:11"},"nodeType":"ModifierInvocation","src":"12020:12:11"}],"name":"updateProtocolFlatFee","nameLocation":"11963:21:11","parameters":{"id":4326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4325,"mutability":"mutable","name":"protocolFlatFee_","nameLocation":"11993:16:11","nodeType":"VariableDeclaration","scope":4339,"src":"11985:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4324,"name":"uint256","nodeType":"ElementaryTypeName","src":"11985:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11984:26:11"},"returnParameters":{"id":4329,"nodeType":"ParameterList","parameters":[],"src":"12033:0:11"},"scope":4340,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":3485,"name":"IZRC20Metadata","nameLocations":["722:14:11"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"722:14:11"},"id":3486,"nodeType":"InheritanceSpecifier","src":"722:14:11"},{"baseName":{"id":3487,"name":"ZRC20Errors","nameLocations":["738:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":3484,"src":"738:11:11"},"id":3488,"nodeType":"InheritanceSpecifier","src":"738:11:11"},{"baseName":{"id":3489,"name":"ZRC20Events","nameLocations":["751:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":4898,"src":"751:11:11"},"id":3490,"nodeType":"InheritanceSpecifier","src":"751:11:11"}],"canonicalName":"ZRC20","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[4340,4898,3484,4844,4825],"name":"ZRC20","nameLocation":"713:5:11","scope":4341,"usedErrors":[3469,3471,3473,3475,3477,3479,3481,3483],"usedEvents":[4853,4861,4869,4881,4885,4889,4893,4897]}],"license":"MIT"},"id":11} \ No newline at end of file diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index f5765fd9..32385fe7 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -20,6 +20,7 @@ import { solanaDeposit, trackCCTX, withdraw, + zetachainWithdrawAndCall, } from "."; export interface ZetaChainClientParamsBase { @@ -128,4 +129,5 @@ export class ZetaChainClient { getZRC20FromERC20 = getZRC20FromERC20; getZRC20GasToken = getZRC20GasToken; solanaDeposit = solanaDeposit; + zetachainWithdrawAndCall = zetachainWithdrawAndCall; } diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index accb0f2b..058d4108 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -14,3 +14,4 @@ export * from "./sendZeta"; export * from "./solanaDeposit"; export * from "./trackCCTX"; export * from "./withdraw"; +export * from "./zetachainWithdrawAndCall"; diff --git a/packages/client/src/zetachainWithdrawAndCall.ts b/packages/client/src/zetachainWithdrawAndCall.ts new file mode 100644 index 00000000..051ddcf6 --- /dev/null +++ b/packages/client/src/zetachainWithdrawAndCall.ts @@ -0,0 +1,101 @@ +import { ethers } from "ethers"; + +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; +import { ZetaChainClient } from "./client"; + +export const zetachainWithdrawAndCall = async function ( + this: ZetaChainClient, + args: { + amount: string; + zrc20: string; + receiver: string; + function: string; + types: string; + values: any[]; + gasLimit: number; + gasPrice: ethers.BigNumber; + gatewayZetaChain: string; + callOnRevert: boolean; + onRevertGasLimit: number; + revertAddress: string; + revertMessage: string; + } +) { + const signer = this.signer; + const { utils } = ethers; + + const gateway = new ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + abortAddress: "0x0000000000000000000000000000000000000000", + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + }; + + const txOptions = { + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + }; + + const functionSignature = utils.id(args.function).slice(0, 10); + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + const message = utils.hexlify( + utils.concat([functionSignature, encodedParameters]) + ); + const zrc20 = new ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const decimals = await zrc20.decimals(); + const value = utils.parseUnits(args.amount, decimals); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( + args.gasLimit + ); + if (args.zrc20 === gasZRC20) { + const approveGasAndWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value.add(gasFee), + txOptions + ); + await approveGasAndWithdraw.wait(); + } else { + const gasZRC20Contract = new ethers.Contract( + gasZRC20, + ZRC20ABI.abi, + signer + ); + const approveGas = await gasZRC20Contract.approve( + args.gatewayZetaChain, + gasFee, + txOptions + ); + await approveGas.wait(); + const approveWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value, + txOptions + ); + await approveWithdraw.wait(); + } + const method = + "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))"; + const tx = await gateway[method]( + utils.hexlify(args.receiver), + value, + args.zrc20, + message, + args.gasLimit, + revertOptions, + txOptions + ); + return tx; +}; diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts index 81a19d80..079095f8 100644 --- a/packages/tasks/src/zetachainWithdrawAndCall.ts +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -1,90 +1,31 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; -import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; -import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; +import { ZetaChainClient } from "../../client/src/"; export const zetachainWithdrawAndCall = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const [signer] = await hre.ethers.getSigners(); - const { utils } = hre.ethers; - - const gateway = new hre.ethers.Contract( - args.gatewayZetaChain, - GatewayABI.abi, - signer - ); - - const revertOptions = { - abortAddress: "0x0000000000000000000000000000000000000000", - callOnRevert: args.callOnRevert, - onRevertGasLimit: args.onRevertGasLimit, - revertAddress: args.revertAddress, - // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), - }; - - const txOptions = { - gasLimit: args.gasLimit, - gasPrice: args.gasPrice, - }; - - const functionSignature = utils.id(args.function).slice(0, 10); - const encodedParameters = utils.defaultAbiCoder.encode( - JSON.parse(args.types), - args.values - ); - - const message = utils.hexlify( - utils.concat([functionSignature, encodedParameters]) - ); - + const { ethers } = hre as any; + const [signer] = await ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); try { - const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); - const decimals = await zrc20.decimals(); - const value = utils.parseUnits(args.amount, decimals); - const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( - args.gasLimit - ); - if (args.zrc20 === gasZRC20) { - const approveGasAndWithdraw = await zrc20.approve( - args.gatewayZetaChain, - value.add(gasFee), - txOptions - ); - await approveGasAndWithdraw.wait(); - } else { - const gasZRC20Contract = new hre.ethers.Contract( - gasZRC20, - ZRC20ABI.abi, - signer - ); - const approveGas = await gasZRC20Contract.approve( - args.gatewayZetaChain, - gasFee, - txOptions - ); - await approveGas.wait(); - const approveWithdraw = await zrc20.approve( - args.gatewayZetaChain, - value, - txOptions - ); - await approveWithdraw.wait(); - } - const method = - "withdrawAndCall(bytes,uint256,address,bytes,uint256,(address,bool,address,bytes,uint256))"; - const tx = await gateway[method]( - utils.hexlify(args.receiver), - value, - args.zrc20, - message, - args.gasLimit, - revertOptions, - txOptions - ); + const tx = await client.zetachainWithdrawAndCall({ + amount: args.amount, + zrc20: args.zrc20, + receiver: args.receiver, + function: args.function, + types: args.types, + values: args.values, + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + gatewayZetaChain: args.gatewayZetaChain, + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + revertMessage: args.revertMessage, + }); const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); From bc06386ba64d4d07ba23c4d4aad6114cfd8a81b7 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 19:05:30 +0900 Subject: [PATCH 13/18] wip --- packages/client/src/client.ts | 6 ++ packages/client/src/evmDepositAndCall.ts | 82 ++++++++++++++++++ packages/client/src/index.ts | 3 + packages/client/src/zetachainCall.ts | 79 +++++++++++++++++ packages/client/src/zetachainWithdraw.ts | 86 +++++++++++++++++++ .../client/src/zetachainWithdrawAndCall.ts | 1 - packages/tasks/src/evmDepositAndCall.ts | 83 ++++-------------- packages/tasks/src/zetachainCall.ts | 81 ++++------------- packages/tasks/src/zetachainWithdraw.ts | 83 ++++-------------- 9 files changed, 309 insertions(+), 195 deletions(-) create mode 100644 packages/client/src/evmDepositAndCall.ts create mode 100644 packages/client/src/zetachainCall.ts create mode 100644 packages/client/src/zetachainWithdraw.ts diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 32385fe7..bb630a51 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -21,6 +21,9 @@ import { trackCCTX, withdraw, zetachainWithdrawAndCall, + zetachainWithdraw, + zetachainCall, + evmDepositAndCall, } from "."; export interface ZetaChainClientParamsBase { @@ -130,4 +133,7 @@ export class ZetaChainClient { getZRC20GasToken = getZRC20GasToken; solanaDeposit = solanaDeposit; zetachainWithdrawAndCall = zetachainWithdrawAndCall; + zetachainWithdraw = zetachainWithdraw; + zetachainCall = zetachainCall; + evmDepositAndCall = evmDepositAndCall; } diff --git a/packages/client/src/evmDepositAndCall.ts b/packages/client/src/evmDepositAndCall.ts new file mode 100644 index 00000000..c82a7288 --- /dev/null +++ b/packages/client/src/evmDepositAndCall.ts @@ -0,0 +1,82 @@ +import { ethers } from "ethers"; + +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import { ZetaChainClient } from "./client"; +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; + +export const evmDepositAndCall = async function ( + this: ZetaChainClient, + args: { + amount: string; + receiver: string; + gatewayEvm: string; + callOnRevert: boolean; + revertAddress: string; + gasPrice: ethers.BigNumber; + gasLimit: number; + onRevertGasLimit: number; + revertMessage: string; + erc20: string; + types: string; + values: any[]; + } +) { + const signer = this.signer; + const { utils } = ethers; + const gateway = new ethers.Contract(args.gatewayEvm, GatewayABI.abi, signer); + + const revertOptions = { + abortAddress: "0x0000000000000000000000000000000000000000", + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + }; + + const txOptions = { + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + }; + + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + let tx; + if (args.erc20) { + const erc20Contract = new ethers.Contract( + args.erc20, + ERC20_ABI.abi, + signer + ); + const decimals = await erc20Contract.decimals(); + const value = utils.parseUnits(args.amount, decimals); + await erc20Contract.connect(signer).approve(args.gatewayEvm, value); + const method = + "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + value, + args.erc20, + encodedParameters, + revertOptions, + txOptions + ); + } else { + const value = utils.parseEther(args.amount); + const method = + "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + encodedParameters, + revertOptions, + { + ...txOptions, + value, + } + ); + } + + return tx; +}; diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 058d4108..97ef04a5 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -15,3 +15,6 @@ export * from "./solanaDeposit"; export * from "./trackCCTX"; export * from "./withdraw"; export * from "./zetachainWithdrawAndCall"; +export * from "./zetachainWithdraw"; +export * from "./zetachainCall"; +export * from "./evmDepositAndCall"; diff --git a/packages/client/src/zetachainCall.ts b/packages/client/src/zetachainCall.ts new file mode 100644 index 00000000..7ff523a2 --- /dev/null +++ b/packages/client/src/zetachainCall.ts @@ -0,0 +1,79 @@ +import { ethers } from "ethers"; + +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; +import { ZetaChainClient } from "./client"; + +export const zetachainCall = async function ( + this: ZetaChainClient, + args: { + amount: string; + zrc20: string; + receiver: string; + function: string; + types: string; + values: any[]; + gasLimit: number; + gasPrice: ethers.BigNumber; + gatewayZetaChain: string; + callOnRevert: boolean; + onRevertGasLimit: number; + revertAddress: string; + revertMessage: string; + } +) { + const signer = this.signer; + const { utils } = ethers; + + const gateway = new ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + abortAddress: "0x0000000000000000000000000000000000000000", + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + }; + + const txOptions = { + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + }; + + const functionSignature = utils.id(args.function).slice(0, 10); + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + + const message = utils.hexlify( + utils.concat([functionSignature, encodedParameters]) + ); + const zrc20 = new ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( + args.gasLimit + ); + const gasZRC20Contract = new ethers.Contract(gasZRC20, ZRC20ABI.abi, signer); + const approve = await gasZRC20Contract.approve( + args.gatewayZetaChain, + gasFee, + txOptions + ); + await approve.wait(); + const tx = await gateway[ + "call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))" + ]( + utils.hexlify(args.receiver), + gasZRC20, + message, + args.gasLimit, + revertOptions, + txOptions + ); + return tx; +}; diff --git a/packages/client/src/zetachainWithdraw.ts b/packages/client/src/zetachainWithdraw.ts new file mode 100644 index 00000000..ce631dd6 --- /dev/null +++ b/packages/client/src/zetachainWithdraw.ts @@ -0,0 +1,86 @@ +import { ethers } from "ethers"; + +import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; +import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; +import { ZetaChainClient } from "./client"; + +export const zetachainWithdraw = async function ( + this: ZetaChainClient, + args: { + amount: string; + zrc20: string; + receiver: string; + gasLimit: number; + gasPrice: ethers.BigNumber; + gatewayZetaChain: string; + callOnRevert: boolean; + onRevertGasLimit: number; + revertAddress: string; + revertMessage: string; + } +) { + const signer = this.signer; + const { utils } = ethers; + + const gateway = new ethers.Contract( + args.gatewayZetaChain, + GatewayABI.abi, + signer + ); + + const revertOptions = { + abortAddress: "0x0000000000000000000000000000000000000000", + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + }; + + const txOptions = { + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + }; + + const zrc20 = new ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); + const decimals = await zrc20.decimals(); + const value = utils.parseUnits(args.amount, decimals); + const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( + args.gasLimit + ); + if (args.zrc20 === gasZRC20) { + const approveGasAndWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value.add(gasFee), + txOptions + ); + await approveGasAndWithdraw.wait(); + } else { + const gasZRC20Contract = new ethers.Contract( + gasZRC20, + ZRC20ABI.abi, + signer + ); + const approveGas = await gasZRC20Contract.approve( + args.gatewayZetaChain, + gasFee, + txOptions + ); + await approveGas.wait(); + const approveWithdraw = await zrc20.approve( + args.gatewayZetaChain, + value, + txOptions + ); + await approveWithdraw.wait(); + } + const method = + "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))"; + const tx = await gateway[method]( + utils.hexlify(args.receiver), + value, + args.zrc20, + revertOptions, + txOptions + ); + return tx; +}; diff --git a/packages/client/src/zetachainWithdrawAndCall.ts b/packages/client/src/zetachainWithdrawAndCall.ts index 051ddcf6..9b5dd6ee 100644 --- a/packages/client/src/zetachainWithdrawAndCall.ts +++ b/packages/client/src/zetachainWithdrawAndCall.ts @@ -36,7 +36,6 @@ export const zetachainWithdrawAndCall = async function ( callOnRevert: args.callOnRevert, onRevertGasLimit: args.onRevertGasLimit, revertAddress: args.revertAddress, - // not used revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), }; diff --git a/packages/tasks/src/evmDepositAndCall.ts b/packages/tasks/src/evmDepositAndCall.ts index e6df98b3..5e56d541 100644 --- a/packages/tasks/src/evmDepositAndCall.ts +++ b/packages/tasks/src/evmDepositAndCall.ts @@ -1,76 +1,29 @@ -import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; - -import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import { ZetaChainClient } from "../../client/src/"; export const evmDepositAndCall = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const [signer] = await hre.ethers.getSigners(); - const { utils } = hre.ethers; - - const gateway = new hre.ethers.Contract( - args.gatewayEvm, - GatewayABI.abi, - signer - ); - - const revertOptions = { - abortAddress: "0x0000000000000000000000000000000000000000", - callOnRevert: args.callOnRevert, - onRevertGasLimit: args.onRevertGasLimit, - revertAddress: args.revertAddress, - // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), - }; - - const txOptions = { - gasLimit: args.gasLimit, - gasPrice: args.gasPrice, - }; - - const encodedParameters = utils.defaultAbiCoder.encode( - JSON.parse(args.types), - args.values - ); - + const { ethers } = hre as any; + const [signer] = await ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); try { - let tx; - if (args.erc20) { - const erc20Contract = new hre.ethers.Contract( - args.erc20, - ERC20_ABI.abi, - signer - ); - const decimals = await erc20Contract.decimals(); - const value = utils.parseUnits(args.amount, decimals); - await erc20Contract.connect(signer).approve(args.gatewayEvm, value); - const method = - "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))"; - tx = await gateway[method]( - args.receiver, - value, - args.erc20, - encodedParameters, - revertOptions, - txOptions - ); - } else { - const value = utils.parseEther(args.amount); - const method = - "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))"; - tx = await gateway[method]( - args.receiver, - encodedParameters, - revertOptions, - { - ...txOptions, - value, - } - ); - } + const tx = await client.evmDepositAndCall({ + amount: args.amount, + receiver: args.receiver, + gatewayEvm: args.gatewayEvm, + callOnRevert: args.callOnRevert, + revertAddress: args.revertAddress, + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + onRevertGasLimit: args.onRevertGasLimit, + revertMessage: args.revertMessage, + erc20: args.erc20, + types: args.types, + values: args.values, + }); if (tx) { const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index 3af03d9e..8571fc2b 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -1,73 +1,30 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; - -import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; -import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; +import { ZetaChainClient } from "../../client/src/"; export const zetachainCall = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const [signer] = await hre.ethers.getSigners(); - const { utils } = hre.ethers; - - const gateway = new hre.ethers.Contract( - args.gatewayZetaChain, - GatewayABI.abi, - signer - ); - - const revertOptions = { - abortAddress: "0x0000000000000000000000000000000000000000", - callOnRevert: args.callOnRevert, - onRevertGasLimit: args.onRevertGasLimit, - revertAddress: args.revertAddress, - // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), - }; - - const txOptions = { - gasLimit: args.gasLimit, - gasPrice: args.gasPrice, - }; - - const functionSignature = utils.id(args.function).slice(0, 10); - const encodedParameters = utils.defaultAbiCoder.encode( - JSON.parse(args.types), - args.values - ); - - const message = utils.hexlify( - utils.concat([functionSignature, encodedParameters]) - ); - + const { ethers } = hre as any; + const [signer] = await ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); try { - const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); - const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( - args.gasLimit - ); - const gasZRC20Contract = new hre.ethers.Contract( - gasZRC20, - ZRC20ABI.abi, - signer - ); - const approve = await gasZRC20Contract.approve( - args.gatewayZetaChain, - gasFee, - txOptions - ); - await approve.wait(); - const tx = await gateway[ - "call(bytes,address,bytes,uint256,(address,bool,address,bytes,uint256))" - ]( - utils.hexlify(args.receiver), - gasZRC20, - message, - args.callGasLimit, - revertOptions, - txOptions - ); - + const tx = await client.zetachainCall({ + amount: args.amount, + zrc20: args.zrc20, + receiver: args.receiver, + function: args.function, + types: args.types, + values: args.values, + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + gatewayZetaChain: args.gatewayZetaChain, + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + revertMessage: args.revertMessage, + }); const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); } catch (e) { diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts index 4996b88c..97946d39 100644 --- a/packages/tasks/src/zetachainWithdraw.ts +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -1,78 +1,27 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; - -import GatewayABI from "./abi/GatewayZEVM.sol/GatewayZEVM.json"; -import ZRC20ABI from "./abi/ZRC20.sol/ZRC20.json"; +import { ZetaChainClient } from "../../client/src/"; export const zetachainWithdraw = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const [signer] = await hre.ethers.getSigners(); - const { utils } = hre.ethers; - - const gateway = new hre.ethers.Contract( - args.gatewayZetaChain, - GatewayABI.abi, - signer - ); - - const revertOptions = { - abortAddress: "0x0000000000000000000000000000000000000000", - callOnRevert: args.callOnRevert, - onRevertGasLimit: args.onRevertGasLimit, - revertAddress: args.revertAddress, - // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), - }; - - const txOptions = { - gasLimit: args.gasLimit, - gasPrice: args.gasPrice, - }; - + const { ethers } = hre as any; + const [signer] = await ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); try { - const zrc20 = new hre.ethers.Contract(args.zrc20, ZRC20ABI.abi, signer); - const decimals = await zrc20.decimals(); - const value = utils.parseUnits(args.amount, decimals); - const [gasZRC20, gasFee] = await zrc20.withdrawGasFeeWithGasLimit( - args.gasLimit - ); - if (args.zrc20 === gasZRC20) { - const approveGasAndWithdraw = await zrc20.approve( - args.gatewayZetaChain, - value.add(gasFee), - txOptions - ); - await approveGasAndWithdraw.wait(); - } else { - const gasZRC20Contract = new hre.ethers.Contract( - gasZRC20, - ZRC20ABI.abi, - signer - ); - const approveGas = await gasZRC20Contract.approve( - args.gatewayZetaChain, - gasFee, - txOptions - ); - await approveGas.wait(); - const approveWithdraw = await zrc20.approve( - args.gatewayZetaChain, - value, - txOptions - ); - await approveWithdraw.wait(); - } - const method = - "withdraw(bytes,uint256,address,(address,bool,address,bytes,uint256))"; - const tx = await gateway[method]( - utils.hexlify(args.receiver), - value, - args.zrc20, - revertOptions, - txOptions - ); + const tx = await client.zetachainWithdraw({ + amount: args.amount, + zrc20: args.zrc20, + receiver: args.receiver, + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + gatewayZetaChain: args.gatewayZetaChain, + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + revertMessage: args.revertMessage, + }); const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); From a759ecf4792c1276241123c303ab997899086e7f Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 21:38:24 +0900 Subject: [PATCH 14/18] evmcall --- packages/client/src/client.ts | 2 ++ packages/client/src/evmCall.ts | 48 ++++++++++++++++++++++++++++++++++ packages/client/src/index.ts | 1 + packages/tasks/src/evmCall.ts | 46 ++++++++++---------------------- 4 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 packages/client/src/evmCall.ts diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index bb630a51..d266a03f 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -24,6 +24,7 @@ import { zetachainWithdraw, zetachainCall, evmDepositAndCall, + evmCall, } from "."; export interface ZetaChainClientParamsBase { @@ -136,4 +137,5 @@ export class ZetaChainClient { zetachainWithdraw = zetachainWithdraw; zetachainCall = zetachainCall; evmDepositAndCall = evmDepositAndCall; + evmCall = evmCall; } diff --git a/packages/client/src/evmCall.ts b/packages/client/src/evmCall.ts new file mode 100644 index 00000000..d316dd87 --- /dev/null +++ b/packages/client/src/evmCall.ts @@ -0,0 +1,48 @@ +import { ethers } from "ethers"; + +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import { ZetaChainClient } from "./client"; + +export const evmCall = async function ( + this: ZetaChainClient, + args: { + receiver: string; + gatewayEvm: string; + callOnRevert: boolean; + revertAddress: string; + gasPrice: ethers.BigNumber; + gasLimit: number; + onRevertGasLimit: number; + revertMessage: string; + types: string; + values: any[]; + } +) { + const signer = this.signer; + const { utils } = ethers; + const gateway = new ethers.Contract(args.gatewayEvm, GatewayABI.abi, signer); + + const encodedParameters = utils.defaultAbiCoder.encode( + JSON.parse(args.types), + args.values + ); + const tx = await gateway[ + "call(address,bytes,(address,bool,address,bytes,uint256))" + ]( + args.receiver, + encodedParameters, + { + abortAddress: "0x0000000000000000000000000000000000000000", + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + }, + { + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + } + ); + + return tx; +}; diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 97ef04a5..b1246788 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -18,3 +18,4 @@ export * from "./zetachainWithdrawAndCall"; export * from "./zetachainWithdraw"; export * from "./zetachainCall"; export * from "./evmDepositAndCall"; +export * from "./evmCall"; diff --git a/packages/tasks/src/evmCall.ts b/packages/tasks/src/evmCall.ts index 01ee363d..9e312be2 100644 --- a/packages/tasks/src/evmCall.ts +++ b/packages/tasks/src/evmCall.ts @@ -1,42 +1,24 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; - -import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import { ZetaChainClient } from "../../client/src/"; export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { const [signer] = await hre.ethers.getSigners(); - const { utils } = hre.ethers; - - const gateway = new hre.ethers.Contract( - args.gatewayEvm, - GatewayABI.abi, - signer - ); - - const encodedParameters = utils.defaultAbiCoder.encode( - JSON.parse(args.types), - args.values - ); + const client = new ZetaChainClient({ network: "testnet", signer }); try { - const tx = await gateway[ - "call(address,bytes,(address,bool,address,bytes,uint256))" - ]( - args.receiver, - encodedParameters, - { - abortAddress: "0x0000000000000000000000000000000000000000", - callOnRevert: args.callOnRevert, - onRevertGasLimit: args.onRevertGasLimit, - revertAddress: args.revertAddress, - // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), - }, - { - gasLimit: args.gasLimit, - gasPrice: args.gasPrice, - } - ); + const tx = await client.evmCall({ + receiver: args.receiver, + gatewayEvm: args.gatewayEvm, + callOnRevert: args.callOnRevert, + revertAddress: args.revertAddress, + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + onRevertGasLimit: args.onRevertGasLimit, + revertMessage: args.revertMessage, + types: args.types, + values: args.values, + }); const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); } catch (e) { From 2aaeb2f0631c6b6a6f086292b3210a841b5be95c Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 21:41:28 +0900 Subject: [PATCH 15/18] deposit --- packages/client/src/client.ts | 2 + packages/client/src/evmDeposit.ts | 68 +++++++++++++++++++++++++++++++ packages/client/src/index.ts | 1 + packages/tasks/src/evmDeposit.ts | 66 +++++++----------------------- 4 files changed, 85 insertions(+), 52 deletions(-) create mode 100644 packages/client/src/evmDeposit.ts diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index d266a03f..ebd4abf1 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -25,6 +25,7 @@ import { zetachainCall, evmDepositAndCall, evmCall, + evmDeposit, } from "."; export interface ZetaChainClientParamsBase { @@ -138,4 +139,5 @@ export class ZetaChainClient { zetachainCall = zetachainCall; evmDepositAndCall = evmDepositAndCall; evmCall = evmCall; + evmDeposit = evmDeposit; } diff --git a/packages/client/src/evmDeposit.ts b/packages/client/src/evmDeposit.ts new file mode 100644 index 00000000..1976c5b8 --- /dev/null +++ b/packages/client/src/evmDeposit.ts @@ -0,0 +1,68 @@ +import { ethers } from "ethers"; + +import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import { ZetaChainClient } from "./client"; +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; + +export const evmDeposit = async function ( + this: ZetaChainClient, + args: { + amount: string; + receiver: string; + gatewayEvm: string; + callOnRevert: boolean; + revertAddress: string; + gasPrice: ethers.BigNumber; + gasLimit: number; + onRevertGasLimit: number; + revertMessage: string; + erc20: string; + } +) { + const signer = this.signer; + const { utils } = ethers; + const gateway = new ethers.Contract(args.gatewayEvm, GatewayABI.abi, signer); + + const revertOptions = { + abortAddress: "0x0000000000000000000000000000000000000000", + callOnRevert: args.callOnRevert, + onRevertGasLimit: args.onRevertGasLimit, + revertAddress: args.revertAddress, + // not used + revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), + }; + + const txOptions = { + gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + }; + let tx; + if (args.erc20) { + const erc20Contract = new ethers.Contract( + args.erc20, + ERC20_ABI.abi, + signer + ); + const decimals = await erc20Contract.decimals(); + const value = utils.parseUnits(args.amount, decimals); + await erc20Contract.connect(signer).approve(args.gatewayEvm, value); + const method = + "deposit(address,uint256,address,(address,bool,address,bytes,uint256))"; + tx = await gateway[method]( + args.receiver, + value, + args.erc20, + revertOptions, + txOptions + ); + } else { + const value = utils.parseEther(args.amount); + const method = "deposit(address,(address,bool,address,bytes,uint256))"; + tx = await gateway[method](args.receiver, revertOptions, { + ...txOptions, + value, + }); + } + + return tx; +}; diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index b1246788..4448eed3 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -19,3 +19,4 @@ export * from "./zetachainWithdraw"; export * from "./zetachainCall"; export * from "./evmDepositAndCall"; export * from "./evmCall"; +export * from "./evmDeposit"; diff --git a/packages/tasks/src/evmDeposit.ts b/packages/tasks/src/evmDeposit.ts index b5668f56..c6ecba45 100644 --- a/packages/tasks/src/evmDeposit.ts +++ b/packages/tasks/src/evmDeposit.ts @@ -1,61 +1,23 @@ -import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; - -import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; +import { ZetaChainClient } from "../../client/src/"; export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { const [signer] = await hre.ethers.getSigners(); - const { utils } = hre.ethers; - - const gateway = new hre.ethers.Contract( - args.gatewayEvm, - GatewayABI.abi, - signer - ); - - const revertOptions = { - abortAddress: "0x0000000000000000000000000000000000000000", - callOnRevert: args.callOnRevert, - onRevertGasLimit: args.onRevertGasLimit, - revertAddress: args.revertAddress, - // not used - revertMessage: utils.hexlify(utils.toUtf8Bytes(args.revertMessage)), - }; - - const txOptions = { - gasLimit: args.gasLimit, - gasPrice: args.gasPrice, - }; - + const client = new ZetaChainClient({ network: "testnet", signer }); try { - let tx; - if (args.erc20) { - const erc20Contract = new hre.ethers.Contract( - args.erc20, - ERC20_ABI.abi, - signer - ); - const decimals = await erc20Contract.decimals(); - const value = utils.parseUnits(args.amount, decimals); - await erc20Contract.connect(signer).approve(args.gatewayEvm, value); - const method = - "deposit(address,uint256,address,(address,bool,address,bytes,uint256))"; - tx = await gateway[method]( - args.receiver, - value, - args.erc20, - revertOptions, - txOptions - ); - } else { - const value = utils.parseEther(args.amount); - const method = "deposit(address,(address,bool,address,bytes,uint256))"; - tx = await gateway[method](args.receiver, revertOptions, { - ...txOptions, - value, - }); - } + const tx = await client.evmDeposit({ + amount: args.amount, + receiver: args.receiver, + gatewayEvm: args.gatewayEvm, + callOnRevert: args.callOnRevert, + revertAddress: args.revertAddress, + gasPrice: args.gasPrice, + gasLimit: args.gasLimit, + onRevertGasLimit: args.onRevertGasLimit, + revertMessage: args.revertMessage, + erc20: args.erc20, + }); if (tx) { const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); From ce2aed4bdae479cd1837bf82616ca01e2f05b6e5 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 21:42:27 +0900 Subject: [PATCH 16/18] refactor --- packages/tasks/src/evmCall.ts | 5 ++--- packages/tasks/src/evmDeposit.ts | 4 ++-- packages/tasks/src/evmDepositAndCall.ts | 5 ++--- packages/tasks/src/zetachainCall.ts | 5 ++--- packages/tasks/src/zetachainWithdraw.ts | 5 ++--- packages/tasks/src/zetachainWithdrawAndCall.ts | 5 ++--- 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/packages/tasks/src/evmCall.ts b/packages/tasks/src/evmCall.ts index 9e312be2..51b71014 100644 --- a/packages/tasks/src/evmCall.ts +++ b/packages/tasks/src/evmCall.ts @@ -3,10 +3,9 @@ import type { HardhatRuntimeEnvironment } from "hardhat/types"; import { ZetaChainClient } from "../../client/src/"; export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { - const [signer] = await hre.ethers.getSigners(); - const client = new ZetaChainClient({ network: "testnet", signer }); - try { + const [signer] = await hre.ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.evmCall({ receiver: args.receiver, gatewayEvm: args.gatewayEvm, diff --git a/packages/tasks/src/evmDeposit.ts b/packages/tasks/src/evmDeposit.ts index c6ecba45..02360df4 100644 --- a/packages/tasks/src/evmDeposit.ts +++ b/packages/tasks/src/evmDeposit.ts @@ -3,9 +3,9 @@ import type { HardhatRuntimeEnvironment } from "hardhat/types"; import { ZetaChainClient } from "../../client/src/"; export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { - const [signer] = await hre.ethers.getSigners(); - const client = new ZetaChainClient({ network: "testnet", signer }); try { + const [signer] = await hre.ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.evmDeposit({ amount: args.amount, receiver: args.receiver, diff --git a/packages/tasks/src/evmDepositAndCall.ts b/packages/tasks/src/evmDepositAndCall.ts index 5e56d541..bab95c7a 100644 --- a/packages/tasks/src/evmDepositAndCall.ts +++ b/packages/tasks/src/evmDepositAndCall.ts @@ -6,10 +6,9 @@ export const evmDepositAndCall = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const { ethers } = hre as any; - const [signer] = await ethers.getSigners(); - const client = new ZetaChainClient({ network: "testnet", signer }); try { + const [signer] = await hre.ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.evmDepositAndCall({ amount: args.amount, receiver: args.receiver, diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index 8571fc2b..7b36ca4d 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -6,10 +6,9 @@ export const zetachainCall = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const { ethers } = hre as any; - const [signer] = await ethers.getSigners(); - const client = new ZetaChainClient({ network: "testnet", signer }); try { + const [signer] = await hre.ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.zetachainCall({ amount: args.amount, zrc20: args.zrc20, diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts index 97946d39..5f64500a 100644 --- a/packages/tasks/src/zetachainWithdraw.ts +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -6,10 +6,9 @@ export const zetachainWithdraw = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const { ethers } = hre as any; - const [signer] = await ethers.getSigners(); - const client = new ZetaChainClient({ network: "testnet", signer }); try { + const [signer] = await hre.ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.zetachainWithdraw({ amount: args.amount, zrc20: args.zrc20, diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts index 079095f8..cdf9d8f0 100644 --- a/packages/tasks/src/zetachainWithdrawAndCall.ts +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -7,10 +7,9 @@ export const zetachainWithdrawAndCall = async ( args: any, hre: HardhatRuntimeEnvironment ) => { - const { ethers } = hre as any; - const [signer] = await ethers.getSigners(); - const client = new ZetaChainClient({ network: "testnet", signer }); try { + const [signer] = await hre.ethers.getSigners(); + const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.zetachainWithdrawAndCall({ amount: args.amount, zrc20: args.zrc20, From b80fc279f6b3082c9da3a8f6a8978f5051866441 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 21:43:00 +0900 Subject: [PATCH 17/18] lint --- packages/client/src/client.ts | 10 +++++----- packages/client/src/evmCall.ts | 8 ++++---- packages/client/src/evmDeposit.ts | 12 ++++++------ packages/client/src/evmDepositAndCall.ts | 12 ++++++------ packages/client/src/index.ts | 10 +++++----- packages/client/src/zetachainCall.ts | 10 +++++----- packages/client/src/zetachainWithdraw.ts | 6 +++--- packages/client/src/zetachainWithdrawAndCall.ts | 10 +++++----- packages/tasks/src/evmCall.ts | 9 +++++---- packages/tasks/src/evmDeposit.ts | 11 ++++++----- packages/tasks/src/evmDepositAndCall.ts | 11 ++++++----- packages/tasks/src/zetachainCall.ts | 11 ++++++----- packages/tasks/src/zetachainWithdraw.ts | 7 ++++--- packages/tasks/src/zetachainWithdrawAndCall.ts | 10 +++++----- 14 files changed, 71 insertions(+), 66 deletions(-) diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index ebd4abf1..3098191e 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -4,6 +4,9 @@ import merge from "lodash/merge"; import { deposit, + evmCall, + evmDeposit, + evmDepositAndCall, getBalances, getChainId, getEndpoint, @@ -20,12 +23,9 @@ import { solanaDeposit, trackCCTX, withdraw, - zetachainWithdrawAndCall, - zetachainWithdraw, zetachainCall, - evmDepositAndCall, - evmCall, - evmDeposit, + zetachainWithdraw, + zetachainWithdrawAndCall, } from "."; export interface ZetaChainClientParamsBase { diff --git a/packages/client/src/evmCall.ts b/packages/client/src/evmCall.ts index d316dd87..f72d808c 100644 --- a/packages/client/src/evmCall.ts +++ b/packages/client/src/evmCall.ts @@ -6,13 +6,13 @@ import { ZetaChainClient } from "./client"; export const evmCall = async function ( this: ZetaChainClient, args: { - receiver: string; - gatewayEvm: string; callOnRevert: boolean; - revertAddress: string; - gasPrice: ethers.BigNumber; gasLimit: number; + gasPrice: ethers.BigNumber; + gatewayEvm: string; onRevertGasLimit: number; + receiver: string; + revertAddress: string; revertMessage: string; types: string; values: any[]; diff --git a/packages/client/src/evmDeposit.ts b/packages/client/src/evmDeposit.ts index 1976c5b8..ba2fc963 100644 --- a/packages/client/src/evmDeposit.ts +++ b/packages/client/src/evmDeposit.ts @@ -1,22 +1,22 @@ +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; import { ethers } from "ethers"; import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; import { ZetaChainClient } from "./client"; -import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; export const evmDeposit = async function ( this: ZetaChainClient, args: { amount: string; - receiver: string; - gatewayEvm: string; callOnRevert: boolean; - revertAddress: string; - gasPrice: ethers.BigNumber; + erc20: string; gasLimit: number; + gasPrice: ethers.BigNumber; + gatewayEvm: string; onRevertGasLimit: number; + receiver: string; + revertAddress: string; revertMessage: string; - erc20: string; } ) { const signer = this.signer; diff --git a/packages/client/src/evmDepositAndCall.ts b/packages/client/src/evmDepositAndCall.ts index c82a7288..8cad739d 100644 --- a/packages/client/src/evmDepositAndCall.ts +++ b/packages/client/src/evmDepositAndCall.ts @@ -1,22 +1,22 @@ +import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; import { ethers } from "ethers"; import GatewayABI from "./abi/GatewayEVM.sol/GatewayEVM.json"; import { ZetaChainClient } from "./client"; -import ERC20_ABI from "@openzeppelin/contracts/build/contracts/ERC20.json"; export const evmDepositAndCall = async function ( this: ZetaChainClient, args: { amount: string; - receiver: string; - gatewayEvm: string; callOnRevert: boolean; - revertAddress: string; - gasPrice: ethers.BigNumber; + erc20: string; gasLimit: number; + gasPrice: ethers.BigNumber; + gatewayEvm: string; onRevertGasLimit: number; + receiver: string; + revertAddress: string; revertMessage: string; - erc20: string; types: string; values: any[]; } diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 4448eed3..27f71902 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -1,5 +1,8 @@ export * from "./client"; export * from "./deposit"; +export * from "./evmCall"; +export * from "./evmDeposit"; +export * from "./evmDepositAndCall"; export * from "./getBalances"; export * from "./getChainId"; export * from "./getEndpoint"; @@ -14,9 +17,6 @@ export * from "./sendZeta"; export * from "./solanaDeposit"; export * from "./trackCCTX"; export * from "./withdraw"; -export * from "./zetachainWithdrawAndCall"; -export * from "./zetachainWithdraw"; export * from "./zetachainCall"; -export * from "./evmDepositAndCall"; -export * from "./evmCall"; -export * from "./evmDeposit"; +export * from "./zetachainWithdraw"; +export * from "./zetachainWithdrawAndCall"; diff --git a/packages/client/src/zetachainCall.ts b/packages/client/src/zetachainCall.ts index 7ff523a2..4d4a8c87 100644 --- a/packages/client/src/zetachainCall.ts +++ b/packages/client/src/zetachainCall.ts @@ -8,18 +8,18 @@ export const zetachainCall = async function ( this: ZetaChainClient, args: { amount: string; - zrc20: string; - receiver: string; + callOnRevert: boolean; function: string; - types: string; - values: any[]; gasLimit: number; gasPrice: ethers.BigNumber; gatewayZetaChain: string; - callOnRevert: boolean; onRevertGasLimit: number; + receiver: string; revertAddress: string; revertMessage: string; + types: string; + values: any[]; + zrc20: string; } ) { const signer = this.signer; diff --git a/packages/client/src/zetachainWithdraw.ts b/packages/client/src/zetachainWithdraw.ts index ce631dd6..027249f0 100644 --- a/packages/client/src/zetachainWithdraw.ts +++ b/packages/client/src/zetachainWithdraw.ts @@ -8,15 +8,15 @@ export const zetachainWithdraw = async function ( this: ZetaChainClient, args: { amount: string; - zrc20: string; - receiver: string; + callOnRevert: boolean; gasLimit: number; gasPrice: ethers.BigNumber; gatewayZetaChain: string; - callOnRevert: boolean; onRevertGasLimit: number; + receiver: string; revertAddress: string; revertMessage: string; + zrc20: string; } ) { const signer = this.signer; diff --git a/packages/client/src/zetachainWithdrawAndCall.ts b/packages/client/src/zetachainWithdrawAndCall.ts index 9b5dd6ee..630e97fd 100644 --- a/packages/client/src/zetachainWithdrawAndCall.ts +++ b/packages/client/src/zetachainWithdrawAndCall.ts @@ -8,18 +8,18 @@ export const zetachainWithdrawAndCall = async function ( this: ZetaChainClient, args: { amount: string; - zrc20: string; - receiver: string; + callOnRevert: boolean; function: string; - types: string; - values: any[]; gasLimit: number; gasPrice: ethers.BigNumber; gatewayZetaChain: string; - callOnRevert: boolean; onRevertGasLimit: number; + receiver: string; revertAddress: string; revertMessage: string; + types: string; + values: any[]; + zrc20: string; } ) { const signer = this.signer; diff --git a/packages/tasks/src/evmCall.ts b/packages/tasks/src/evmCall.ts index 51b71014..c170bd2b 100644 --- a/packages/tasks/src/evmCall.ts +++ b/packages/tasks/src/evmCall.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import { ZetaChainClient } from "../../client/src/"; export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { @@ -7,13 +8,13 @@ export const evmCall = async (args: any, hre: HardhatRuntimeEnvironment) => { const [signer] = await hre.ethers.getSigners(); const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.evmCall({ - receiver: args.receiver, - gatewayEvm: args.gatewayEvm, callOnRevert: args.callOnRevert, - revertAddress: args.revertAddress, - gasPrice: args.gasPrice, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + gatewayEvm: args.gatewayEvm, onRevertGasLimit: args.onRevertGasLimit, + receiver: args.receiver, + revertAddress: args.revertAddress, revertMessage: args.revertMessage, types: args.types, values: args.values, diff --git a/packages/tasks/src/evmDeposit.ts b/packages/tasks/src/evmDeposit.ts index 02360df4..31b4815b 100644 --- a/packages/tasks/src/evmDeposit.ts +++ b/packages/tasks/src/evmDeposit.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import { ZetaChainClient } from "../../client/src/"; export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { @@ -8,15 +9,15 @@ export const evmDeposit = async (args: any, hre: HardhatRuntimeEnvironment) => { const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.evmDeposit({ amount: args.amount, - receiver: args.receiver, - gatewayEvm: args.gatewayEvm, callOnRevert: args.callOnRevert, - revertAddress: args.revertAddress, - gasPrice: args.gasPrice, + erc20: args.erc20, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + gatewayEvm: args.gatewayEvm, onRevertGasLimit: args.onRevertGasLimit, + receiver: args.receiver, + revertAddress: args.revertAddress, revertMessage: args.revertMessage, - erc20: args.erc20, }); if (tx) { const receipt = await tx.wait(); diff --git a/packages/tasks/src/evmDepositAndCall.ts b/packages/tasks/src/evmDepositAndCall.ts index bab95c7a..7b1231f8 100644 --- a/packages/tasks/src/evmDepositAndCall.ts +++ b/packages/tasks/src/evmDepositAndCall.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import { ZetaChainClient } from "../../client/src/"; export const evmDepositAndCall = async ( @@ -11,15 +12,15 @@ export const evmDepositAndCall = async ( const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.evmDepositAndCall({ amount: args.amount, - receiver: args.receiver, - gatewayEvm: args.gatewayEvm, callOnRevert: args.callOnRevert, - revertAddress: args.revertAddress, - gasPrice: args.gasPrice, + erc20: args.erc20, gasLimit: args.gasLimit, + gasPrice: args.gasPrice, + gatewayEvm: args.gatewayEvm, onRevertGasLimit: args.onRevertGasLimit, + receiver: args.receiver, + revertAddress: args.revertAddress, revertMessage: args.revertMessage, - erc20: args.erc20, types: args.types, values: args.values, }); diff --git a/packages/tasks/src/zetachainCall.ts b/packages/tasks/src/zetachainCall.ts index 7b36ca4d..e2a22d0c 100644 --- a/packages/tasks/src/zetachainCall.ts +++ b/packages/tasks/src/zetachainCall.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import { ZetaChainClient } from "../../client/src/"; export const zetachainCall = async ( @@ -11,18 +12,18 @@ export const zetachainCall = async ( const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.zetachainCall({ amount: args.amount, - zrc20: args.zrc20, - receiver: args.receiver, + callOnRevert: args.callOnRevert, function: args.function, - types: args.types, - values: args.values, gasLimit: args.gasLimit, gasPrice: args.gasPrice, gatewayZetaChain: args.gatewayZetaChain, - callOnRevert: args.callOnRevert, onRevertGasLimit: args.onRevertGasLimit, + receiver: args.receiver, revertAddress: args.revertAddress, revertMessage: args.revertMessage, + types: args.types, + values: args.values, + zrc20: args.zrc20, }); const receipt = await tx.wait(); console.log("Transaction hash:", receipt.transactionHash); diff --git a/packages/tasks/src/zetachainWithdraw.ts b/packages/tasks/src/zetachainWithdraw.ts index 5f64500a..6ed57051 100644 --- a/packages/tasks/src/zetachainWithdraw.ts +++ b/packages/tasks/src/zetachainWithdraw.ts @@ -1,5 +1,6 @@ import { task, types } from "hardhat/config"; import type { HardhatRuntimeEnvironment } from "hardhat/types"; + import { ZetaChainClient } from "../../client/src/"; export const zetachainWithdraw = async ( @@ -11,15 +12,15 @@ export const zetachainWithdraw = async ( const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.zetachainWithdraw({ amount: args.amount, - zrc20: args.zrc20, - receiver: args.receiver, + callOnRevert: args.callOnRevert, gasLimit: args.gasLimit, gasPrice: args.gasPrice, gatewayZetaChain: args.gatewayZetaChain, - callOnRevert: args.callOnRevert, onRevertGasLimit: args.onRevertGasLimit, + receiver: args.receiver, revertAddress: args.revertAddress, revertMessage: args.revertMessage, + zrc20: args.zrc20, }); const receipt = await tx.wait(); diff --git a/packages/tasks/src/zetachainWithdrawAndCall.ts b/packages/tasks/src/zetachainWithdrawAndCall.ts index cdf9d8f0..e686accc 100644 --- a/packages/tasks/src/zetachainWithdrawAndCall.ts +++ b/packages/tasks/src/zetachainWithdrawAndCall.ts @@ -12,18 +12,18 @@ export const zetachainWithdrawAndCall = async ( const client = new ZetaChainClient({ network: "testnet", signer }); const tx = await client.zetachainWithdrawAndCall({ amount: args.amount, - zrc20: args.zrc20, - receiver: args.receiver, + callOnRevert: args.callOnRevert, function: args.function, - types: args.types, - values: args.values, gasLimit: args.gasLimit, gasPrice: args.gasPrice, gatewayZetaChain: args.gatewayZetaChain, - callOnRevert: args.callOnRevert, onRevertGasLimit: args.onRevertGasLimit, + receiver: args.receiver, revertAddress: args.revertAddress, revertMessage: args.revertMessage, + types: args.types, + values: args.values, + zrc20: args.zrc20, }); const receipt = await tx.wait(); From 585aedb6fe3372b14e80f4d710ffb508773624b9 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Fri, 6 Sep 2024 21:43:27 +0900 Subject: [PATCH 18/18] build --- typechain-types/factories/contracts/SwapHelperLib__factory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typechain-types/factories/contracts/SwapHelperLib__factory.ts b/typechain-types/factories/contracts/SwapHelperLib__factory.ts index b631670a..f0dd0034 100644 --- a/typechain-types/factories/contracts/SwapHelperLib__factory.ts +++ b/typechain-types/factories/contracts/SwapHelperLib__factory.ts @@ -136,7 +136,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6113cb610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063b864987914610045578063c63585cc14610075575b600080fd5b61005f600480360381019061005a9190610e1b565b6100a5565b60405161006c9190611028565b60405180910390f35b61008f600480360381019061008a9190610dc8565b610519565b60405161009c9190610fe4565b60405180910390f35b60006060600267ffffffffffffffff8111156100c4576100c361128f565b5b6040519080825280602002602001820160405280156100f25781602001602082028036833780820191505090505b509050848160008151811061010a57610109611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061015957610158611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061021d8773ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610d9b565b858461058b565b9050600367ffffffffffffffff81111561023a5761023961128f565b5b6040519080825280602002602001820160405280156102685781602001602082028036833780820191505090505b50915085826000815181106102805761027f611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff1663569541b96040518163ffffffff1660e01b815260040160206040518083038186803b15801561030057600080fd5b505afa158015610314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103389190610d9b565b8260018151811061034c5761034b611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848260028151811061039b5761039a611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061045f8873ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104589190610d9b565b868561058b565b9050806001825161047091906110d5565b8151811061048157610480611260565b5b6020026020010151826001845161049891906110d5565b815181106104a9576104a8611260565b5b6020026020010151116104e35780600182516104c591906110d5565b815181106104d6576104d5611260565b5b602002602001015161050c565b81600183516104f291906110d5565b8151811061050357610502611260565b5b60200260200101515b9350505050949350505050565b6000806000610528858561070d565b91509150858282604051602001610540929190610f76565b60405160208183030381529060405280519060200120604051602001610567929190610fa2565b6040516020818303038152906040528051906020012060001c925050509392505050565b60606002825110156105c9576040517f20db826700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815167ffffffffffffffff8111156105e4576105e361128f565b5b6040519080825280602002602001820160405280156106125781602001602082028036833780820191505090505b509050828160008151811061062a57610629611260565b5b60200260200101818152505060005b6001835161064791906110d5565b8110156107055760008061069c8786858151811061066857610667611260565b5b60200260200101518760018761067e919061104e565b8151811061068f5761068e611260565b5b6020026020010151610829565b915091506106c58484815181106106b6576106b5611260565b5b6020026020010151838361093b565b846001856106d3919061104e565b815181106106e4576106e3611260565b5b602002602001018181525050505080806106fd9061118b565b915050610639565b509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610776576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106107b05782846107b3565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610822576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008060006108388585610a30565b509050600080610849888888610b4c565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190610e82565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610925578082610928565b81815b8095508196505050505050935093915050565b600080841415610977576040517f098fb56100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314806109865750600082145b156109bd576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109d46103e586610be290919063ffffffff16565b905060006109eb8483610be290919063ffffffff16565b90506000610a1683610a086103e889610be290919063ffffffff16565b610c3e90919063ffffffff16565b90508082610a2491906110a4565b93505050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a99576040517fbd969eb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610ad3578284610ad6565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008373ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401610b89929190610fff565b60206040518083038186803b158015610ba157600080fd5b505afa158015610bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd99190610d9b565b90509392505050565b600080610bf88385610c9a90919063ffffffff16565b809350819250505080610c37576040517f5797276a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b600080610c548385610cee90919063ffffffff16565b809350819250505080610c93576040517fa259879500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b6000806000841415610cb3576001600091509150610ce7565b6000838502905083858281610ccb57610cca611231565b5b0414610cde576000809250925050610ce7565b60018192509250505b9250929050565b6000806000838501905084811015610d0d576000809250925050610d16565b60018192509250505b9250929050565b600081359050610d2c81611322565b92915050565b600081519050610d4181611322565b92915050565b600081359050610d5681611339565b92915050565b600081519050610d6b81611350565b92915050565b600081359050610d8081611367565b92915050565b600081519050610d958161137e565b92915050565b600060208284031215610db157610db06112be565b5b6000610dbf84828501610d32565b91505092915050565b600080600060608486031215610de157610de06112be565b5b6000610def86828701610d1d565b9350506020610e0086828701610d1d565b9250506040610e1186828701610d1d565b9150509250925092565b60008060008060808587031215610e3557610e346112be565b5b6000610e4387828801610d47565b9450506020610e5487828801610d1d565b9350506040610e6587828801610d1d565b9250506060610e7687828801610d71565b91505092959194509250565b600080600060608486031215610e9b57610e9a6112be565b5b6000610ea986828701610d5c565b9350506020610eba86828701610d5c565b9250506040610ecb86828701610d86565b9150509250925092565b610ede81611109565b82525050565b610eed81611109565b82525050565b610f04610eff82611109565b6111d4565b82525050565b610f1b610f168261111b565b6111e6565b82525050565b6000610f2e602083611043565b9150610f39826112d0565b602082019050919050565b6000610f51600183611043565b9150610f5c826112f9565b600182019050919050565b610f7081611171565b82525050565b6000610f828285610ef3565b601482019150610f928284610ef3565b6014820191508190509392505050565b6000610fad82610f44565b9150610fb98285610ef3565b601482019150610fc98284610f0a565b602082019150610fd882610f21565b91508190509392505050565b6000602082019050610ff96000830184610ee4565b92915050565b60006040820190506110146000830185610ed5565b6110216020830184610ed5565b9392505050565b600060208201905061103d6000830184610f67565b92915050565b600081905092915050565b600061105982611171565b915061106483611171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561109957611098611202565b5b828201905092915050565b60006110af82611171565b91506110ba83611171565b9250826110ca576110c9611231565b5b828204905092915050565b60006110e082611171565b91506110eb83611171565b9250828210156110fe576110fd611202565b5b828203905092915050565b600061111482611151565b9050919050565b6000819050919050565b600061113082611109565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600061119682611171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111c9576111c8611202565b5b600182019050919050565b60006111df826111f0565b9050919050565b6000819050919050565b60006111fb826112c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b61132b81611109565b811461133657600080fd5b50565b61134281611125565b811461134d57600080fd5b50565b61135981611137565b811461136457600080fd5b50565b61137081611171565b811461137b57600080fd5b50565b6113878161117b565b811461139257600080fd5b5056fea26469706673582212208c534231e21b804377a0937029aac7257d8e6ff5e9d37ba468c1d4f5bdbdb2b364736f6c63430008070033"; + "0x6113cb610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c8063b864987914610045578063c63585cc14610075575b600080fd5b61005f600480360381019061005a9190610e1b565b6100a5565b60405161006c9190611028565b60405180910390f35b61008f600480360381019061008a9190610dc8565b610519565b60405161009c9190610fe4565b60405180910390f35b60006060600267ffffffffffffffff8111156100c4576100c361128f565b5b6040519080825280602002602001820160405280156100f25781602001602082028036833780820191505090505b509050848160008151811061010a57610109611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160018151811061015957610158611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061021d8773ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610d9b565b858461058b565b9050600367ffffffffffffffff81111561023a5761023961128f565b5b6040519080825280602002602001820160405280156102685781602001602082028036833780820191505090505b50915085826000815181106102805761027f611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff1663569541b96040518163ffffffff1660e01b815260040160206040518083038186803b15801561030057600080fd5b505afa158015610314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103389190610d9b565b8260018151811061034c5761034b611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848260028151811061039b5761039a611260565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061045f8873ffffffffffffffffffffffffffffffffffffffff1663d936a0126040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104589190610d9b565b868561058b565b9050806001825161047091906110d5565b8151811061048157610480611260565b5b6020026020010151826001845161049891906110d5565b815181106104a9576104a8611260565b5b6020026020010151116104e35780600182516104c591906110d5565b815181106104d6576104d5611260565b5b602002602001015161050c565b81600183516104f291906110d5565b8151811061050357610502611260565b5b60200260200101515b9350505050949350505050565b6000806000610528858561070d565b91509150858282604051602001610540929190610f76565b60405160208183030381529060405280519060200120604051602001610567929190610fa2565b6040516020818303038152906040528051906020012060001c925050509392505050565b60606002825110156105c9576040517f20db826700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815167ffffffffffffffff8111156105e4576105e361128f565b5b6040519080825280602002602001820160405280156106125781602001602082028036833780820191505090505b509050828160008151811061062a57610629611260565b5b60200260200101818152505060005b6001835161064791906110d5565b8110156107055760008061069c8786858151811061066857610667611260565b5b60200260200101518760018761067e919061104e565b8151811061068f5761068e611260565b5b6020026020010151610829565b915091506106c58484815181106106b6576106b5611260565b5b6020026020010151838361093b565b846001856106d3919061104e565b815181106106e4576106e3611260565b5b602002602001018181525050505080806106fd9061118b565b915050610639565b509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610776576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106107b05782846107b3565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610822576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008060006108388585610a30565b509050600080610849888888610b4c565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190610e82565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610925578082610928565b81815b8095508196505050505050935093915050565b600080841415610977576040517f098fb56100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314806109865750600082145b156109bd576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109d46103e586610be290919063ffffffff16565b905060006109eb8483610be290919063ffffffff16565b90506000610a1683610a086103e889610be290919063ffffffff16565b610c3e90919063ffffffff16565b90508082610a2491906110a4565b93505050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a99576040517fbd969eb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610ad3578284610ad6565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008373ffffffffffffffffffffffffffffffffffffffff1663e6a4390584846040518363ffffffff1660e01b8152600401610b89929190610fff565b60206040518083038186803b158015610ba157600080fd5b505afa158015610bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd99190610d9b565b90509392505050565b600080610bf88385610c9a90919063ffffffff16565b809350819250505080610c37576040517f5797276a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b600080610c548385610cee90919063ffffffff16565b809350819250505080610c93576040517fa259879500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b6000806000841415610cb3576001600091509150610ce7565b6000838502905083858281610ccb57610cca611231565b5b0414610cde576000809250925050610ce7565b60018192509250505b9250929050565b6000806000838501905084811015610d0d576000809250925050610d16565b60018192509250505b9250929050565b600081359050610d2c81611322565b92915050565b600081519050610d4181611322565b92915050565b600081359050610d5681611339565b92915050565b600081519050610d6b81611350565b92915050565b600081359050610d8081611367565b92915050565b600081519050610d958161137e565b92915050565b600060208284031215610db157610db06112be565b5b6000610dbf84828501610d32565b91505092915050565b600080600060608486031215610de157610de06112be565b5b6000610def86828701610d1d565b9350506020610e0086828701610d1d565b9250506040610e1186828701610d1d565b9150509250925092565b60008060008060808587031215610e3557610e346112be565b5b6000610e4387828801610d47565b9450506020610e5487828801610d1d565b9350506040610e6587828801610d1d565b9250506060610e7687828801610d71565b91505092959194509250565b600080600060608486031215610e9b57610e9a6112be565b5b6000610ea986828701610d5c565b9350506020610eba86828701610d5c565b9250506040610ecb86828701610d86565b9150509250925092565b610ede81611109565b82525050565b610eed81611109565b82525050565b610f04610eff82611109565b6111d4565b82525050565b610f1b610f168261111b565b6111e6565b82525050565b6000610f2e602083611043565b9150610f39826112d0565b602082019050919050565b6000610f51600183611043565b9150610f5c826112f9565b600182019050919050565b610f7081611171565b82525050565b6000610f828285610ef3565b601482019150610f928284610ef3565b6014820191508190509392505050565b6000610fad82610f44565b9150610fb98285610ef3565b601482019150610fc98284610f0a565b602082019150610fd882610f21565b91508190509392505050565b6000602082019050610ff96000830184610ee4565b92915050565b60006040820190506110146000830185610ed5565b6110216020830184610ed5565b9392505050565b600060208201905061103d6000830184610f67565b92915050565b600081905092915050565b600061105982611171565b915061106483611171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561109957611098611202565b5b828201905092915050565b60006110af82611171565b91506110ba83611171565b9250826110ca576110c9611231565b5b828204905092915050565b60006110e082611171565b91506110eb83611171565b9250828210156110fe576110fd611202565b5b828203905092915050565b600061111482611151565b9050919050565b6000819050919050565b600061113082611109565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600061119682611171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111c9576111c8611202565b5b600182019050919050565b60006111df826111f0565b9050919050565b6000819050919050565b60006111fb826112c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b61132b81611109565b811461133657600080fd5b50565b61134281611125565b811461134d57600080fd5b50565b61135981611137565b811461136457600080fd5b50565b61137081611171565b811461137b57600080fd5b50565b6113878161117b565b811461139257600080fd5b5056fea264697066735822122091326fa5a1e05568afced79d7982065e6f64e99076529c9e6158e19ea98da91a64736f6c63430008070033"; type SwapHelperLibConstructorParams = | [signer?: Signer]