{ "contractName": "GnosisSafe", "abi": [ { "constant": false, "inputs": [ { "name": "owner", "type": "address" }, { "name": "_threshold", "type": "uint256" } ], "name": "addOwnerWithThreshold", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "DOMAIN_SEPARATOR_TYPEHASH", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "owner", "type": "address" } ], "name": "isOwner", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }, { "name": "operation", "type": "uint8" } ], "name": "execTransactionFromModule", "outputs": [ { "name": "success", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "bytes32" } ], "name": "signedMessages", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "module", "type": "address" } ], "name": "enableModule", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_threshold", "type": "uint256" } ], "name": "changeThreshold", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" }, { "name": "", "type": "bytes32" } ], "name": "approvedHashes", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_masterCopy", "type": "address" } ], "name": "changeMasterCopy", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "SENTINEL_MODULES", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "SENTINEL_OWNERS", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getOwners", "outputs": [ { "name": "", "type": "address[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "NAME", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "nonce", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getModules", "outputs": [ { "name": "", "type": "address[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "SAFE_MSG_TYPEHASH", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "SAFE_TX_TYPEHASH", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "prevModule", "type": "address" }, { "name": "module", "type": "address" } ], "name": "disableModule", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "prevOwner", "type": "address" }, { "name": "oldOwner", "type": "address" }, { "name": "newOwner", "type": "address" } ], "name": "swapOwner", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "getThreshold", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "domainSeparator", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "prevOwner", "type": "address" }, { "name": "owner", "type": "address" }, { "name": "_threshold", "type": "uint256" } ], "name": "removeOwner", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "VERSION", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "payable": true, "stateMutability": "payable", "type": "fallback" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "txHash", "type": "bytes32" } ], "name": "ExecutionFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "owner", "type": "address" } ], "name": "AddedOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "owner", "type": "address" } ], "name": "RemovedOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "threshold", "type": "uint256" } ], "name": "ChangedThreshold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "module", "type": "address" } ], "name": "EnabledModule", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "module", "type": "address" } ], "name": "DisabledModule", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "newContract", "type": "address" } ], "name": "ContractCreation", "type": "event" }, { "constant": false, "inputs": [ { "name": "_owners", "type": "address[]" }, { "name": "_threshold", "type": "uint256" }, { "name": "to", "type": "address" }, { "name": "data", "type": "bytes" } ], "name": "setup", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }, { "name": "operation", "type": "uint8" }, { "name": "safeTxGas", "type": "uint256" }, { "name": "dataGas", "type": "uint256" }, { "name": "gasPrice", "type": "uint256" }, { "name": "gasToken", "type": "address" }, { "name": "refundReceiver", "type": "address" }, { "name": "signatures", "type": "bytes" } ], "name": "execTransaction", "outputs": [ { "name": "success", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }, { "name": "operation", "type": "uint8" } ], "name": "requiredTxGas", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "hashToApprove", "type": "bytes32" } ], "name": "approveHash", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_data", "type": "bytes" } ], "name": "signMessage", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_data", "type": "bytes" }, { "name": "_signature", "type": "bytes" } ], "name": "isValidSignature", "outputs": [ { "name": "isValid", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "message", "type": "bytes" } ], "name": "getMessageHash", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }, { "name": "operation", "type": "uint8" }, { "name": "safeTxGas", "type": "uint256" }, { "name": "dataGas", "type": "uint256" }, { "name": "gasPrice", "type": "uint256" }, { "name": "gasToken", "type": "address" }, { "name": "refundReceiver", "type": "address" }, { "name": "_nonce", "type": "uint256" } ], "name": "encodeTransactionData", "outputs": [ { "name": "", "type": "bytes" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" }, { "name": "data", "type": "bytes" }, { "name": "operation", "type": "uint8" }, { "name": "safeTxGas", "type": "uint256" }, { "name": "dataGas", "type": "uint256" }, { "name": "gasPrice", "type": "uint256" }, { "name": "gasToken", "type": "address" }, { "name": "refundReceiver", "type": "address" }, { "name": "_nonce", "type": "uint256" } ], "name": "getTransactionHash", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b506154e4806100206000396000f300608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a1028c4146101985780630d582f131461021d5780630ec78d9e1461026a5780631db61b541461034057806320c13b0b146103735780632f54bf6e1461043a578063468721a7146104955780635ae6bd371461054d578063610b592514610592578063694e80c3146105d55780636a761202146106025780637d8329741461075e5780637de7edef146107c357806385a5affe1461080657806385e332cd1461086f5780638cff6355146108c6578063a0e67e2b1461091d578063a3f4df7e14610989578063affed0e014610a19578063b2494df314610a44578063c0856ffc14610ab0578063c4ca3a9c14610ae3578063ccafc38714610b97578063d4d9bdcd14610bca578063d8d11f7814610bfb578063e009cfde14610d1f578063e318b52b14610d82578063e75235b814610e05578063e86637db14610e30578063f698da2514610fb1578063f8dc5dd914610fe4578063ffa1ad7414611051575b005b3480156101a457600080fd5b506101ff600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110e1565b60405180826000191660001916815260200191505060405180910390f35b34801561022957600080fd5b50610268600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611387565b005b34801561027657600080fd5b5061033e6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506117f0565b005b34801561034c57600080fd5b5061035561196e565b60405180826000191660001916815260200191505060405180910390f35b34801561037f57600080fd5b50610420600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611995565b604051808215151515815260200191505060405180910390f35b34801561044657600080fd5b5061047b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119eb565b604051808215151515815260200191505060405180910390f35b3480156104a157600080fd5b50610533600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050611a6d565b604051808215151515815260200191505060405180910390f35b34801561055957600080fd5b5061057c6004803603810190808035600019169060200190929190505050611b99565b6040518082815260200191505060405180910390f35b34801561059e57600080fd5b506105d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb1565b005b3480156105e157600080fd5b5061060060048036038101908080359060200190929190505050611ff2565b005b34801561060e57600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061223d565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b506107ad600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506124e8565b6040518082815260200191505060405180910390f35b3480156107cf57600080fd5b50610804600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250d565b005b34801561081257600080fd5b5061086d600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506126ce565b005b34801561087b57600080fd5b506108846127c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108d257600080fd5b506108db6127c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561092957600080fd5b506109326127cd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561097557808201518184015260208101905061095a565b505050509050019250505060405180910390f35b34801561099557600080fd5b5061099e612968565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109de5780820151818401526020810190506109c3565b50505050905090810190601f168015610a0b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a2557600080fd5b50610a2e6129a1565b6040518082815260200191505060405180910390f35b348015610a5057600080fd5b50610a596129a7565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610a9c578082015181840152602081019050610a81565b505050509050019250505060405180910390f35b348015610abc57600080fd5b50610ac5612c4e565b60405180826000191660001916815260200191505060405180910390f35b348015610aef57600080fd5b50610b81600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050612c75565b6040518082815260200191505060405180910390f35b348015610ba357600080fd5b50610bac612e24565b60405180826000191660001916815260200191505060405180910390f35b348015610bd657600080fd5b50610bf96004803603810190808035600019169060200190929190505050612e4b565b005b348015610c0757600080fd5b50610d01600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f9a565b60405180826000191660001916815260200191505060405180910390f35b348015610d2b57600080fd5b50610d80600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613020565b005b348015610d8e57600080fd5b50610e03600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061349c565b005b348015610e1157600080fd5b50610e1a613baf565b6040518082815260200191505060405180910390f35b348015610e3c57600080fd5b50610f36600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f76578082015181840152602081019050610f5b565b50505050905090810190601f168015610fa35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610fbd57600080fd5b50610fc6613ee1565b60405180826000191660001916815260200191505060405180910390f35b348015610ff057600080fd5b5061104f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613ee7565b005b34801561105d57600080fd5b5061106661442f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110a657808201518184015260208101905061108b565b50505050905090810190601f1680156110d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca600102836040518082805190602001908083835b60208310151561113e5780518252602082019150602081019050602083039250611119565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156111d657805182526020820191506020810190506020830392506111b1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060197f01000000000000000000000000000000000000000000000000000000000000000260017f0100000000000000000000000000000000000000000000000000000000000000026006548360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101836000191660001916815260200182600019166000191681526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515611352578051825260208201915060208101905060208303925061132d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16141580156114a45750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1515611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4164647265737320697320616c726561647920616e206f776e6572000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541415156117ec576117eb81611ff2565b5b5050565b600060010260065460001916141515611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f446f6d61696e20536570617261746f7220616c7265616479207365742100000081525060200191505060405180910390fd5b7f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749600102306040516020018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156119255780518252602082019150602081019050602083039250611900565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206006816000191690555061196884848484614468565b50505050565b7f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d474960010281565b6000806119a1846110e1565b90506000835114156119d457600060076000836000191660001916815260200190815260200160002054141591506119e4565b6119e18185856000614482565b91505b5092915050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d206181526020017f6e20656e61626c6564206d6f64756c650000000000000000000000000000000081525060400191505060405180910390fd5b611b8f858585855a614938565b9050949350505050565b60076020528060005260406000206000915090505481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1614158015611cce5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1515611d42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e76616c6964206d6f64756c6520616464726573732070726f76696465640081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6f64756c652068617320616c7265616479206265656e20616464656400000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b600354811115151561215b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5468726573686f6c642063616e6e6f7420657863656564206f776e657220636f81526020017f756e74000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600181101515156121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f5468726573686f6c64206e6565647320746f206265206772656174657220746881526020017f616e20300000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b60008060605a91506122598d8d8d8d8d8d8d8d8d600554613bb9565b90506122ca816040518082805190602001908083835b602083101515612294578051825260208201915060208101905060208303925061226f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902082866001614482565b151561233e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e6174757265732070726f7669646564000000000081525060200191505060405180910390fd5b600560008154809291906001019190505550885a101515156123ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f4e6f7420656e6f7567682067617320746f20657865637574652073616665207481526020017f72616e73616374696f6e0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6124168d8d8d8d60008e148015612405575060008c145b61240f578d612411565b5a5b614938565b92508215156124c1577fabfd711ecdd15ae3a6b3ad16ff2e9d81aec026a39d16725ee164be4fbf857a7c816040518082805190602001908083835b6020831015156124765780518252602082019150602081019050602083039250612451565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060405180826000191660001916815260200191505060405180910390a15b60008711156124d8576124d78289898989614a35565b5b50509a9950505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415151561268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f496e76616c6964206d617374657220636f707920616464726573732070726f7681526020017f696465640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760006127a6846110e1565b600019166000191681526020019081526020016000208190555050565b600181565b600181565b6060806000806003546040519080825280602002602001820160405280156128045781602001602082028038833980820191505090505b5092506000915060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561295f578083838151811015156128b457fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061286f565b82935050505090565b6040805190810160405280600b81526020017f476e6f736973205361666500000000000000000000000000000000000000000081525081565b60055481565b606060008060606000925060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515612abb57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508280600101935050612a16565b82604051908082528060200260200182016040528015612aea5781602001602082028038833980820191505090505b5090506000925060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515612c4557818184815181101515612b9a57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508280600101935050612b55565b80935050505090565b7f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60010281565b60008060003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b5a9150612d53878787875a614938565b1515612d5e57600080fd5b5a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612de9578082015181840152602081019050612dce565b50505050905090810190601f168015612e165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7f14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b2060010281565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515612f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4f6e6c79206f776e6572732063616e20617070726f766520612068617368000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083600019166000191681526020019081526020016000208190555050565b6000612fae8b8b8b8b8b8b8b8b8b8b613bb9565b6040518082805190602001908083835b602083101515612fe35780518252602082019150602081019050602083039250612fbe565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509a9950505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415801561313d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15156131b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e76616c6964206d6f64756c6520616464726573732070726f76696465640081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156132d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f496e76616c696420707265764d6f64756c652c206d6f64756c6520706169722081526020017f70726f766964656400000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16141580156135b95750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b151561362d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561371a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4164647265737320697320616c726561647920616e206f776e6572000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff161415801561376e5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15156137e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561390a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f496e76616c696420707265764f776e65722c206f776e6572207061697220707281526020017f6f7669646564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007f14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b206001028c8c8c6040518082805190602001908083835b602083101515613c195780518252602082019150602081019050602083039250613bf4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208c8c8c8c8c8c8c604051602001808c600019166000191681526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018960001916600019168152602001886002811115613cb457fe5b60ff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b5050505050505050505050506040516020818303038152906040526040518082805190602001908083835b602083101515613d895780518252602082019150602081019050602083039250613d64565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060197f01000000000000000000000000000000000000000000000000000000000000000260017f0100000000000000000000000000000000000000000000000000000000000000026006548360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101836000191660001916815260200182600019166000191681526020019450505050506040516020818303038152906040529150509a9950505050505050505050565b60065481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b8060016003540310151515614053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f4e6577206f776e657220636f756e74206e6565647320746f206265206c61726781526020017f6572207468616e206e6577207468726573686f6c64000000000000000000000081525060400191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16141580156140a75750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b151561411b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614243576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f496e76616c696420707265764f776e65722c206f776e6572207061697220707281526020017f6f7669646564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414151561442a5761442981611ff2565b5b505050565b6040805190810160405280600581526020017f302e302e3200000000000000000000000000000000000000000000000000000081525081565b6144728484614c37565b61447c82826150f7565b50505050565b600080600080600080600060606041600454028a5110156144a65760009750614929565b60009650600091505b600454821015614924576144c38a8361532e565b80955081965082975050505060008560ff16141561467a57836001900495506020838b010190508573ffffffffffffffffffffffffffffffffffffffff166320c13b0b8c836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561457757808201518184015260208101905061455c565b50505050905090810190601f1680156145a45780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156145dd5780820151818401526020810190506145c2565b50505050905090810190601f16801561460a5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561462b57600080fd5b505af115801561463f573d6000803e3d6000fd5b505050506040513d602081101561465557600080fd5b810190808051906020019092919050505015156146755760009750614929565b614856565b60018560ff1614156147d157836001900495508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561472157506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6000191660001916815260200190815260200160002054145b1561472f5760009750614929565b88801561476857508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156147cc576000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e60001916600019168152602001908152602001600020819055505b614855565b60018c868686604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015614848573d6000803e3d6000fd5b5050506020604051035195505b5b8673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1611158061490657506000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156149145760009750614929565b85965081806001019250506144af565b600197505b50505050505050949350505050565b6000806000600281111561494857fe5b84600281111561495457fe5b141561496d576149668787878661535d565b9150614a2b565b6001600281111561497a57fe5b84600281111561498657fe5b141561499e57614997878685615376565b9150614a2a565b6149a78561538d565b905060008173ffffffffffffffffffffffffffffffffffffffff16141591507f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5b5095945050505050565b60008084865a890301029150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614a7b5782614a7d565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614b88578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515614b83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f436f756c64206e6f74207061792067617320636f73747320776974682065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b614c2e565b614b9384828461539f565b1515614c2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f436f756c64206e6f74207061792067617320636f737473207769746820746f6b81526020017f656e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b50505050505050565b600080600080600454141515614cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4f776e657273206861766520616c7265616479206265656e207365747570000081525060200191505060405180910390fd5b84518411151515614d54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5468726573686f6c642063616e6e6f7420657863656564206f776e657220636f81526020017f756e74000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60018410151515614df3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f5468726573686f6c64206e6565647320746f206265206772656174657220746881526020017f616e20300000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60019250600091505b8451821015615062578482815181101515614e1357fe5b90602001906020020151905060008173ffffffffffffffffffffffffffffffffffffffff1614158015614e735750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1515614ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4475706c6963617465206f776e657220616464726573732070726f766964656481525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092508180600101925050614dfc565b6001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508451600381905550836004819055505050505050565b600060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561520b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d6f64756c6573206861766520616c7265616479206265656e20696e6974696181526020017f6c697a656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff1614151561532a576152b582825a615376565b1515615329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f756c64206e6f742066696e69736820696e697469616c697a6174696f6e0081525060200191505060405180910390fd5b5b5050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b6000806000845160208601878987f19050949350505050565b60008060008451602086018786f490509392505050565b60008151602083016000f09050919050565b600060608383604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000808251602084016000896127105a03f16040513d6000823e3d6000811461549b57602081146154a357600094506154ad565b8294506154ad565b8151158315171594505b5050505093925050505600a165627a7a72305820c970763346c3e3eca7d7279c490fc28fd06dd7888989f01a151084588f520e3d0029", "deployedBytecode": "0x608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a1028c4146101985780630d582f131461021d5780630ec78d9e1461026a5780631db61b541461034057806320c13b0b146103735780632f54bf6e1461043a578063468721a7146104955780635ae6bd371461054d578063610b592514610592578063694e80c3146105d55780636a761202146106025780637d8329741461075e5780637de7edef146107c357806385a5affe1461080657806385e332cd1461086f5780638cff6355146108c6578063a0e67e2b1461091d578063a3f4df7e14610989578063affed0e014610a19578063b2494df314610a44578063c0856ffc14610ab0578063c4ca3a9c14610ae3578063ccafc38714610b97578063d4d9bdcd14610bca578063d8d11f7814610bfb578063e009cfde14610d1f578063e318b52b14610d82578063e75235b814610e05578063e86637db14610e30578063f698da2514610fb1578063f8dc5dd914610fe4578063ffa1ad7414611051575b005b3480156101a457600080fd5b506101ff600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110e1565b60405180826000191660001916815260200191505060405180910390f35b34801561022957600080fd5b50610268600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611387565b005b34801561027657600080fd5b5061033e6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506117f0565b005b34801561034c57600080fd5b5061035561196e565b60405180826000191660001916815260200191505060405180910390f35b34801561037f57600080fd5b50610420600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611995565b604051808215151515815260200191505060405180910390f35b34801561044657600080fd5b5061047b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119eb565b604051808215151515815260200191505060405180910390f35b3480156104a157600080fd5b50610533600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050611a6d565b604051808215151515815260200191505060405180910390f35b34801561055957600080fd5b5061057c6004803603810190808035600019169060200190929190505050611b99565b6040518082815260200191505060405180910390f35b34801561059e57600080fd5b506105d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb1565b005b3480156105e157600080fd5b5061060060048036038101908080359060200190929190505050611ff2565b005b34801561060e57600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061223d565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b506107ad600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506124e8565b6040518082815260200191505060405180910390f35b3480156107cf57600080fd5b50610804600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250d565b005b34801561081257600080fd5b5061086d600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506126ce565b005b34801561087b57600080fd5b506108846127c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108d257600080fd5b506108db6127c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561092957600080fd5b506109326127cd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561097557808201518184015260208101905061095a565b505050509050019250505060405180910390f35b34801561099557600080fd5b5061099e612968565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109de5780820151818401526020810190506109c3565b50505050905090810190601f168015610a0b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a2557600080fd5b50610a2e6129a1565b6040518082815260200191505060405180910390f35b348015610a5057600080fd5b50610a596129a7565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610a9c578082015181840152602081019050610a81565b505050509050019250505060405180910390f35b348015610abc57600080fd5b50610ac5612c4e565b60405180826000191660001916815260200191505060405180910390f35b348015610aef57600080fd5b50610b81600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190505050612c75565b6040518082815260200191505060405180910390f35b348015610ba357600080fd5b50610bac612e24565b60405180826000191660001916815260200191505060405180910390f35b348015610bd657600080fd5b50610bf96004803603810190808035600019169060200190929190505050612e4b565b005b348015610c0757600080fd5b50610d01600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f9a565b60405180826000191660001916815260200191505060405180910390f35b348015610d2b57600080fd5b50610d80600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613020565b005b348015610d8e57600080fd5b50610e03600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061349c565b005b348015610e1157600080fd5b50610e1a613baf565b6040518082815260200191505060405180910390f35b348015610e3c57600080fd5b50610f36600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f76578082015181840152602081019050610f5b565b50505050905090810190601f168015610fa35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610fbd57600080fd5b50610fc6613ee1565b60405180826000191660001916815260200191505060405180910390f35b348015610ff057600080fd5b5061104f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613ee7565b005b34801561105d57600080fd5b5061106661442f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156110a657808201518184015260208101905061108b565b50505050905090810190601f1680156110d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca600102836040518082805190602001908083835b60208310151561113e5780518252602082019150602081019050602083039250611119565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156111d657805182526020820191506020810190506020830392506111b1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060197f01000000000000000000000000000000000000000000000000000000000000000260017f0100000000000000000000000000000000000000000000000000000000000000026006548360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101836000191660001916815260200182600019166000191681526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515611352578051825260208201915060208101905060208303925061132d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16141580156114a45750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1515611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4164647265737320697320616c726561647920616e206f776e6572000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541415156117ec576117eb81611ff2565b5b5050565b600060010260065460001916141515611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f446f6d61696e20536570617261746f7220616c7265616479207365742100000081525060200191505060405180910390fd5b7f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749600102306040516020018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156119255780518252602082019150602081019050602083039250611900565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206006816000191690555061196884848484614468565b50505050565b7f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d474960010281565b6000806119a1846110e1565b90506000835114156119d457600060076000836000191660001916815260200190815260200160002054141591506119e4565b6119e18185856000614482565b91505b5092915050565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611b82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d206181526020017f6e20656e61626c6564206d6f64756c650000000000000000000000000000000081525060400191505060405180910390fd5b611b8f858585855a614938565b9050949350505050565b60076020528060005260406000206000915090505481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1614158015611cce5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1515611d42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e76616c6964206d6f64756c6520616464726573732070726f76696465640081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6f64756c652068617320616c7265616479206265656e20616464656400000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b600354811115151561215b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5468726573686f6c642063616e6e6f7420657863656564206f776e657220636f81526020017f756e74000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600181101515156121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f5468726573686f6c64206e6565647320746f206265206772656174657220746881526020017f616e20300000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b60008060605a91506122598d8d8d8d8d8d8d8d8d600554613bb9565b90506122ca816040518082805190602001908083835b602083101515612294578051825260208201915060208101905060208303925061226f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902082866001614482565b151561233e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e6174757265732070726f7669646564000000000081525060200191505060405180910390fd5b600560008154809291906001019190505550885a101515156123ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f4e6f7420656e6f7567682067617320746f20657865637574652073616665207481526020017f72616e73616374696f6e0000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6124168d8d8d8d60008e148015612405575060008c145b61240f578d612411565b5a5b614938565b92508215156124c1577fabfd711ecdd15ae3a6b3ad16ff2e9d81aec026a39d16725ee164be4fbf857a7c816040518082805190602001908083835b6020831015156124765780518252602082019150602081019050602083039250612451565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060405180826000191660001916815260200191505060405180910390a15b60008711156124d8576124d78289898989614a35565b5b50509a9950505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415151561268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f496e76616c6964206d617374657220636f707920616464726573732070726f7681526020017f696465640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760006127a6846110e1565b600019166000191681526020019081526020016000208190555050565b600181565b600181565b6060806000806003546040519080825280602002602001820160405280156128045781602001602082028038833980820191505090505b5092506000915060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561295f578083838151811015156128b457fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061286f565b82935050505090565b6040805190810160405280600b81526020017f476e6f736973205361666500000000000000000000000000000000000000000081525081565b60055481565b606060008060606000925060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515612abb57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508280600101935050612a16565b82604051908082528060200260200182016040528015612aea5781602001602082028038833980820191505090505b5090506000925060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515612c4557818184815181101515612b9a57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508280600101935050612b55565b80935050505090565b7f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60010281565b60008060003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b5a9150612d53878787875a614938565b1515612d5e57600080fd5b5a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612de9578082015181840152602081019050612dce565b50505050905090810190601f168015612e165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7f14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b2060010281565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515612f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4f6e6c79206f776e6572732063616e20617070726f766520612068617368000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083600019166000191681526020019081526020016000208190555050565b6000612fae8b8b8b8b8b8b8b8b8b8b613bb9565b6040518082805190602001908083835b602083101515612fe35780518252602082019150602081019050602083039250612fbe565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509a9950505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415801561313d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15156131b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e76616c6964206d6f64756c6520616464726573732070726f76696465640081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156132d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f496e76616c696420707265764d6f64756c652c206d6f64756c6520706169722081526020017f70726f766964656400000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16141580156135b95750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b151561362d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561371a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4164647265737320697320616c726561647920616e206f776e6572000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff161415801561376e5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15156137e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561390a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f496e76616c696420707265764f776e65722c206f776e6572207061697220707281526020017f6f7669646564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007f14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b206001028c8c8c6040518082805190602001908083835b602083101515613c195780518252602082019150602081019050602083039250613bf4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390208c8c8c8c8c8c8c604051602001808c600019166000191681526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018960001916600019168152602001886002811115613cb457fe5b60ff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b5050505050505050505050506040516020818303038152906040526040518082805190602001908083835b602083101515613d895780518252602082019150602081019050602083039250613d64565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060197f01000000000000000000000000000000000000000000000000000000000000000260017f0100000000000000000000000000000000000000000000000000000000000000026006548360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101836000191660001916815260200182600019166000191681526020019450505050506040516020818303038152906040529150509a9950505050505050505050565b60065481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4d6574686f642063616e206f6e6c792062652063616c6c65642066726f6d207481526020017f68697320636f6e7472616374000000000000000000000000000000000000000081525060400191505060405180910390fd5b8060016003540310151515614053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f4e6577206f776e657220636f756e74206e6565647320746f206265206c61726781526020017f6572207468616e206e6577207468726573686f6c64000000000000000000000081525060400191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16141580156140a75750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b151561411b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614243576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f496e76616c696420707265764f776e65722c206f776e6572207061697220707281526020017f6f7669646564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414151561442a5761442981611ff2565b5b505050565b6040805190810160405280600581526020017f302e302e3200000000000000000000000000000000000000000000000000000081525081565b6144728484614c37565b61447c82826150f7565b50505050565b600080600080600080600060606041600454028a5110156144a65760009750614929565b60009650600091505b600454821015614924576144c38a8361532e565b80955081965082975050505060008560ff16141561467a57836001900495506020838b010190508573ffffffffffffffffffffffffffffffffffffffff166320c13b0b8c836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561457757808201518184015260208101905061455c565b50505050905090810190601f1680156145a45780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156145dd5780820151818401526020810190506145c2565b50505050905090810190601f16801561460a5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561462b57600080fd5b505af115801561463f573d6000803e3d6000fd5b505050506040513d602081101561465557600080fd5b810190808051906020019092919050505015156146755760009750614929565b614856565b60018560ff1614156147d157836001900495508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561472157506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e6000191660001916815260200190815260200160002054145b1561472f5760009750614929565b88801561476857508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156147cc576000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e60001916600019168152602001908152602001600020819055505b614855565b60018c868686604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015614848573d6000803e3d6000fd5b5050506020604051035195505b5b8673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1611158061490657506000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156149145760009750614929565b85965081806001019250506144af565b600197505b50505050505050949350505050565b6000806000600281111561494857fe5b84600281111561495457fe5b141561496d576149668787878661535d565b9150614a2b565b6001600281111561497a57fe5b84600281111561498657fe5b141561499e57614997878685615376565b9150614a2a565b6149a78561538d565b905060008173ffffffffffffffffffffffffffffffffffffffff16141591507f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5b5095945050505050565b60008084865a890301029150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614a7b5782614a7d565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614b88578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515614b83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f436f756c64206e6f74207061792067617320636f73747320776974682065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b614c2e565b614b9384828461539f565b1515614c2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f436f756c64206e6f74207061792067617320636f737473207769746820746f6b81526020017f656e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5b50505050505050565b600080600080600454141515614cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4f776e657273206861766520616c7265616479206265656e207365747570000081525060200191505060405180910390fd5b84518411151515614d54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5468726573686f6c642063616e6e6f7420657863656564206f776e657220636f81526020017f756e74000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60018410151515614df3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f5468726573686f6c64206e6565647320746f206265206772656174657220746881526020017f616e20300000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60019250600091505b8451821015615062578482815181101515614e1357fe5b90602001906020020151905060008173ffffffffffffffffffffffffffffffffffffffff1614158015614e735750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1515614ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f496e76616c6964206f776e657220616464726573732070726f7669646564000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4475706c6963617465206f776e657220616464726573732070726f766964656481525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092508180600101925050614dfc565b6001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508451600381905550836004819055505050505050565b600060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561520b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d6f64756c6573206861766520616c7265616479206265656e20696e6974696181526020017f6c697a656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff1614151561532a576152b582825a615376565b1515615329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f756c64206e6f742066696e69736820696e697469616c697a6174696f6e0081525060200191505060405180910390fd5b5b5050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b6000806000845160208601878987f19050949350505050565b60008060008451602086018786f490509392505050565b60008151602083016000f09050919050565b600060608383604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000808251602084016000896127105a03f16040513d6000823e3d6000811461549b57602081146154a357600094506154ad565b8294506154ad565b8151158315171594505b5050505093925050505600a165627a7a72305820c970763346c3e3eca7d7279c490fc28fd06dd7888989f01a151084588f520e3d0029", "sourceMap": "534:14254:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;534:14254:0;;;;;;;", "deployedSourceMap": "534:14254:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11898:357;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11898:357:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2225:627:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2225:627:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2198:308:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2198:308:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;820:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;820:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11293:447;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11293:447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5925:129:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5925:129:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2785:429:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2785:429:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:49:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1649:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1182:495:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1182:495:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;5357:441:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5357:441:6;;;;;;;;;;;;;;;;;;;;;;;;;;3493:1450:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3493:1450:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1809:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1809:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;626:248:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;626:248:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;10831:130:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10831:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;488:55:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;488:55:5;;;;;;;;;;;;;;;;;;;;;;;;;;;419:54:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;419:54:6;;;;;;;;;;;;;;;;;;;;;;;;;;;6136:458;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6136:458:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6136:458:6;;;;;;;;;;;;;;;;;646:43:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;646:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;646:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1490:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1490:20:0;;;;;;;;;;;;;;;;;;;;;;;3293:738:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3293:738:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3293:738:5;;;;;;;;;;;;;;;;;1329:110:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1329:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9652:572;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9652:572:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1148:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1148:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10468:201;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10468:201:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14289:497;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14289:497:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1938:511:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1938:511:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4345:823:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4345:823:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5804:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5804:115:6;;;;;;;;;;;;;;;;;;;;;;;12968:635:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12968:635:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12968:635:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1516:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3194:817:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3194:817:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;695:40:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;695:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;695:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11898:357;11996:7;12019:23;1373:66;12079:17;;12108:7;12098:18;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12098:18:0;;;;;;;;;;;;;;;;12068:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12068::0;;;12045:82;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12045:82:0;;;;;;;;;;;;;;;;12019:108;;12189:4;12184:10;;12201:1;12196:7;;12205:15;;12222;12167:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12167:71:0;;;12144:104;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12144:104:0;;;;;;;;;;;;;;;;12137:111;;11898:357;;;;:::o;2225:627:6:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2397:1:6;2388:5;:10;;;;:38;;;;;469:3;2402:24;;:5;:24;;;;2388:38;2380:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2536:1;2519:6;:13;2526:5;2519:13;;;;;;;;;;;;;;;;;;;;;;;;;:18;;;2511:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2595:6;:23;469:3;2595:23;;;;;;;;;;;;;;;;;;;;;;;;;2579:6;:13;2586:5;2579:13;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;2654:5;2628:6;:23;469:3;2628:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2669:10;;:12;;;;;;;;;;;;;2696:17;2707:5;2696:17;;;;;;;;;;;;;;;;;;;;;;2794:10;2781:9;;:23;;2777:68;;;2818:27;2834:10;2818:15;:27::i;:::-;2777:68;2225:627;;:::o;2198:308:0:-;2332:1;2313:20;;:15;;:20;;;;2305:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;872:66;2416:25;;2443:4;2405:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2405:43:0;;;2395:54;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2395:54:0;;;;;;;;;;;;;;;;2377:15;:72;;;;;;;2459:40;2469:7;2478:10;2490:2;2494:4;2459:9;:40::i;:::-;2198:308;;;;:::o;820:118::-;872:66;820:118;;;:::o;11293:447::-;11382:12;11410:19;11432:21;11447:5;11432:14;:21::i;:::-;11410:43;;11488:1;11467:10;:17;:22;11463:271;;;11546:1;11515:14;:27;11530:11;11515:27;;;;;;;;;;;;;;;;;;:32;;11505:42;;11463:271;;;11669:54;11685:11;11698:5;11705:10;11717:5;11669:15;:54::i;:::-;11659:64;;11463:271;11293:447;;;;;:::o;5925:129:6:-;6002:4;6046:1;6029:6;:13;6036:5;6029:13;;;;;;;;;;;;;;;;;;;;;;;;;:18;;;;6022:25;;5925:129;;;:::o;2785:429:5:-;2917:12;3025:1;3002:7;:19;3010:10;3002:19;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;;2994:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3161:46;3169:2;3173:5;3180:4;3186:9;3197;3161:7;:46::i;:::-;3151:56;;2785:429;;;;;;:::o;1649:49:0:-;;;;;;;;;;;;;;;;;:::o;1182:495:5:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1348:1:5;1337:6;1329:20;;;;:59;;;;;539:3;1353:35;;1361:6;1353:35;;;;1329:59;1321:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1502:1;1483:7;:15;1491:6;1483:15;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;1475:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1565:7;:25;539:3;1565:25;;;;;;;;;;;;;;;;;;;;;;;;;1547:7;:15;1555:6;1547:15;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;1628:6;1600:7;:25;539:3;1600:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;1649:21;1663:6;1649:21;;;;;;;;;;;;;;;;;;;;;;1182:495;:::o;5357:441:6:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5541:10:6;;5527;:24;;5519:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5675:1;5661:10;:15;;5653:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5739:10;5727:9;:22;;;;5764:27;5781:9;;5764:27;;;;;;;;;;;;;;;;;;5357:441;:::o;3493:1450:0:-;3815:12;3843:16;3881:23;3862:9;3843:28;;3907:194;3942:2;3946:5;3953:4;3959:9;4002;4013:7;4022:8;4032;4042:14;4086:5;;3907:21;:194::i;:::-;3881:220;;4119:68;4145:10;4135:21;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4135:21:0;;;;;;;;;;;;;;;;4158:10;4170;4182:4;4119:15;:68::i;:::-;4111:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4280:5;;:7;;;;;;;;;;;;;4318:9;4305;:22;;4297:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4501:92;4509:2;4513:5;4520:4;4526:9;4550:1;4537:9;:14;:31;;;;;4567:1;4555:8;:13;4537:31;:55;;4583:9;4537:55;;;4571:9;4537:55;4501:7;:92::i;:::-;4491:102;;4608:7;4607:8;4603:82;;;4636:38;4662:10;4652:21;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4652:21:0;;;;;;;;;;;;;;;;4636:38;;;;;;;;;;;;;;;;;;;;;;;;4603:82;4841:1;4830:8;:12;4826:111;;;4858:68;4872:8;4882:7;4891:8;4901;4911:14;4858:13;:68::i;:::-;4826:111;3493:1450;;;;;;;;;;;;;;:::o;1809:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;626:248:9:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:1:9;776:11;:16;;;;768:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;856:11;843:10;;:24;;;;;;;;;;;;;;;;;;626:248;:::o;10831:130:0:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10953:1:0;10913:14;:37;10928:21;10943:5;10928:14;:21::i;:::-;10913:37;;;;;;;;;;;;;;;;;:41;;;;10831:130;:::o;488:55:5:-;539:3;488:55;:::o;419:54:6:-;469:3;419:54;:::o;6136:458::-;6202:9;6227:22;6321:13;6348:20;6266:10;;6252:25;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;6252:25:6;;;;6227:50;;6337:1;6321:17;;6371:6;:23;469:3;6371:23;;;;;;;;;;;;;;;;;;;;;;;;;6348:46;;6404:162;469:3;6410:31;;:12;:31;;;;6404:162;;;6472:12;6457:5;6463;6457:12;;;;;;;;;;;;;;;;;:27;;;;;;;;;;;6513:6;:20;6520:12;6513:20;;;;;;;;;;;;;;;;;;;;;;;;;6498:35;;6547:8;;;;;;;6404:162;;;6582:5;6575:12;;6136:458;;;;:::o;646:43:0:-;;;;;;;;;;;;;;;;;;;;:::o;1490:20::-;;;;:::o;3293:738:5:-;3360:9;3419:19;3452:21;3652:22;3441:1;3419:23;;3476:7;:25;539:3;3476:25;;;;;;;;;;;;;;;;;;;;;;;;;3452:49;;3511:132;539:3;3517:33;;:13;:33;;;;3511:132;;;3582:7;:22;3590:13;3582:22;;;;;;;;;;;;;;;;;;;;;;;;;3566:38;;3618:14;;;;;;;3511:132;;;3691:11;3677:26;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;3677:26:5;;;;3652:51;;3761:1;3747:15;;3788:7;:25;539:3;3788:25;;;;;;;;;;;;;;;;;;;;;;;;;3772:41;;3823:180;539:3;3829:33;;:13;:33;;;;3823:180;;;3899:13;3878:5;3884:11;3878:18;;;;;;;;;;;;;;;;;:34;;;;;;;;;;;3942:7;:22;3950:13;3942:22;;;;;;;;;;;;;;;;;;;;;;;;;3926:38;;3978:14;;;;;;;3823:180;;;4019:5;4012:12;;3293:738;;;;:::o;1329:110:0:-;1373:66;1329:110;;;:::o;9652:572::-;9791:7;9814:16;10053:19;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9833:9:0;9814:28;;9996:46;10004:2;10008:5;10015:4;10021:9;10032;9996:7;:46::i;:::-;9988:55;;;;;;;;10086:9;10075:8;:20;10053:42;;10203:11;10186:29;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10186:29:0;;;10172:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10172:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1148:109;1191:66;1148:109;;;:::o;10468:201::-;10571:1;10549:6;:18;10556:10;10549:18;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;10541:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10661:1;10617:14;:26;10632:10;10617:26;;;;;;;;;;;;;;;:41;10644:13;10617:41;;;;;;;;;;;;;;;;;:45;;;;10468:201;:::o;14289:497::-;14625:7;14665:113;14687:2;14691:5;14698:4;14704:9;14715;14726:7;14735:8;14745;14755:14;14771:6;14665:21;:113::i;:::-;14655:124;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14655:124:0;;;;;;;;;;;;;;;;14648:131;;14289:497;;;;;;;;;;;;:::o;1938:511:5:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2152:1:5;2141:6;2133:20;;;;:59;;;;;539:3;2157:35;;2165:6;2157:35;;;;2133:59;2125:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2277:6;2246:38;;:7;:19;2254:10;2246:19;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;2238:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2361:7;:15;2369:6;2361:15;;;;;;;;;;;;;;;;;;;;;;;;;2339:7;:19;2347:10;2339:19;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;2404:1;2386:7;:15;2394:6;2386:15;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;2420:22;2435:6;2420:22;;;;;;;;;;;;;;;;;;;;;;1938:511;;:::o;4345:823:6:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4528:1:6;4516:8;:13;;;;:44;;;;;469:3;4533:27;;:8;:27;;;;4516:44;4508:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4673:1;4653:6;:16;4660:8;4653:16;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;4645:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4819:1;4807:8;:13;;;;:44;;;;;469:3;4824:27;;:8;:27;;;;4807:44;4799:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4925:8;4904:29;;:6;:17;4911:9;4904:17;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;4896:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5005:6;:16;5012:8;5005:16;;;;;;;;;;;;;;;;;;;;;;;;;4986:6;:16;4993:8;4986:16;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;5051:8;5031:6;:17;5038:9;5031:17;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;5088:1;5069:6;:16;5076:8;5069:16;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;5104:22;5117:8;5104:22;;;;;;;;;;;;;;;;;;;;;;5141:20;5152:8;5141:20;;;;;;;;;;;;;;;;;;;;;;4345:823;;;:::o;5804:115::-;5873:7;5903:9;;5896:16;;5804:115;:::o;12968:635:0:-;13307:5;13328:18;1191:66;13383:16;;13401:2;13405:5;13422:4;13412:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13412:15:0;;;;;;;;;;;;;;;;13429:9;13440;13451:7;13460:8;13470;13480:14;13496:6;13372:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13372:131:0;;;13349:164;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13349:164:0;;;;;;;;;;;;;;;;13328:185;;13552:4;13547:10;;13564:1;13559:7;;13568:15;;13585:10;13530:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13530:66:0;;;13523:73;;12968:635;;;;;;;;;;;;;:::o;1516:30::-;;;;:::o;3194:817:6:-;244:4:11;222:27;;:10;:27;;;214:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:10:6;3415:1;3402:10;;:14;:28;;3394:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3595:1;3586:5;:10;;;;:38;;;;;469:3;3600:24;;:5;:24;;;;3586:38;3578:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:5;3677:26;;:6;:17;3684:9;3677:17;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;3669:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3776:6;:13;3783:5;3776:13;;;;;;;;;;;;;;;;;;;;;;;;;3756:6;:17;3763:9;3756:17;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;3815:1;3799:6;:13;3806:5;3799:13;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;3826:10;;:12;;;;;;;;;;;;;;3853:19;3866:5;3853:19;;;;;;;;;;;;;;;;;;;;;;3953:10;3940:9;;:23;;3936:68;;;3977:27;3993:10;3977:15;:27::i;:::-;3936:68;3194:817;;;:::o;695:40:0:-;;;;;;;;;;;;;;;;;;;;:::o;740:309:2:-;853:32;865:7;874:10;853:11;:32::i;:::-;1020:22;1033:2;1037:4;1020:12;:22::i;:::-;740:309;;;;:::o;6280:2461:0:-;6405:4;6630:17;6670:20;6700:7;6717:9;6736;6755;7104:30;6528:2;6516:9;;:14;6496:10;:17;:34;6492:77;;;6553:5;6546:12;;;;6492:77;6658:1;6630:30;;6783:1;6779:5;;6774:1940;6790:9;;6786:1;:13;6774:1940;;;6832:29;6847:10;6859:1;6832:14;:29::i;:::-;6820:41;;;;;;;;;;;;6941:1;6936;:6;;;6932:1616;;;7084:1;7076:10;;;7061:25;;7439:4;7435:1;7423:10;7419:18;7415:29;7394:50;;7504:12;7484:50;;;7535:4;7541:17;7484:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7484:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7484:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7484:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7484:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7484:75:0;;;;;;;;;;;;;;;;7483:76;7479:135;;;7590:5;7583:12;;;;7479:135;6932:1616;;;7696:1;7691;:6;;;7687:861;;;7835:1;7827:10;;;7812:25;;8018:12;8004:26;;:10;:26;;;;:73;;;;;8076:1;8034:14;:28;8049:12;8034:28;;;;;;;;;;;;;;;:38;8063:8;8034:38;;;;;;;;;;;;;;;;;;:43;8004:73;8000:132;;;8108:5;8101:12;;;;8000:132;8253:11;:41;;;;;8282:12;8268:26;;:10;:26;;;;8253:41;8249:130;;;8359:1;8318:14;:28;8333:12;8318:28;;;;;;;;;;;;;;;:38;8347:8;8318:38;;;;;;;;;;;;;;;;;:42;;;;8249:130;7687:861;;;8505:28;8515:8;8525:1;8528;8531;8505:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8505:28:0;;;;;;;;8490:43;;7687:861;6932:1616;8581:9;8565:25;;:12;:25;;;;:54;;;;8618:1;8594:6;:20;8601:12;8594:20;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;8565:54;8561:105;;;8646:5;8639:12;;;;8561:105;8691:12;8679:24;;6801:3;;;;;;;6774:1940;;;8730:4;8723:11;;6280:2461;;;;;;;;;;;;;;:::o;313:548:3:-;444:12;715:19;489;476:32;;;;;;;;:9;:32;;;;;;;;;472:383;;;532:35;544:2;548:5;555:4;561:5;532:11;:35::i;:::-;522:45;;472:383;;;599:27;586:40;;;;;;;;:9;:40;;;;;;;;;582:273;;;650:36;670:2;674:4;680:5;650:19;:36::i;:::-;640:46;;582:273;;;737:19;751:4;737:13;:19::i;:::-;715:41;;795:1;780:11;:16;;;;770:26;;815:29;832:11;815:29;;;;;;;;;;;;;;;;;;;;;;582:273;472:383;313:548;;;;;;;;:::o;4949:715:0:-;5142:14;5271:16;5195:8;5184:7;5171:9;5161:7;:19;5160:31;5159:44;5142:61;;5316:1;5290:28;;:14;:28;;;:57;;5333:14;5290:57;;;5321:9;5290:57;5271:76;;5381:1;5361:22;;:8;:22;;;5357:301;;;5468:8;:13;;:21;5482:6;5468:21;;;;;;;;;;;;;;;;;;;;;;;5460:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5357:301;;;5567:41;5581:8;5591;5601:6;5567:13;:41::i;:::-;5559:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5357:301;4949:715;;;;;;;:::o;775:1210:6:-;1381:20;1434:9;1533:13;1011:1;998:9;;:14;990:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1154:7;:14;1140:10;:28;;1132:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1292:1;1278:10;:15;;1270:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;469:3;1381:38;;1446:1;1434:13;;1429:433;1453:7;:14;1449:1;:18;1429:433;;;1549:7;1557:1;1549:10;;;;;;;;;;;;;;;;;;1533:26;;1590:1;1581:5;:10;;;;:38;;;;;469:3;1595:24;;:5;:24;;;;1581:38;1573:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1737:1;1720:6;:13;1727:5;1720:13;;;;;;;;;;;;;;;;;;;;;;;;;:18;;;1712:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1812:5;1789:6;:20;1796:12;1789:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;1846:5;1831:20;;1469:3;;;;;;;1429:433;;;469:3;1871:6;:20;1878:12;1871:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;1932:7;:14;1919:10;:27;;;;1968:10;1956:9;:22;;;;775:1210;;;;;:::o;606:409:5:-;720:1;691:7;:25;539:3;691:25;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;683:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;539:3;773:7;:25;539:3;773:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;837:1;831:2;:7;;;;827:181;;;932:40;952:2;956:4;962:9;932:19;:40::i;:::-;924:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:181;606:409;;:::o;1002:914:12:-;1104:7;1113:9;1124;1424:3;1418:4;1414:14;1486:4;1472:12;1468:23;1456:10;1452:40;1446:47;1441:52;;1551:4;1537:12;1533:23;1521:10;1517:40;1511:47;1506:52;;1895:4;1886;1872:12;1868:23;1856:10;1852:40;1846:47;1842:58;1837:63;;1380:530;;;;;;:::o;867:309:3:-;976:12;1158:1;1155;1148:4;1142:11;1135:4;1129;1125:15;1118:5;1114:2;1107:5;1102:58;1091:69;;1077:93;;;;;;:::o;1182:303::-;1284:12;1467:1;1464;1457:4;1451:11;1444:4;1438;1434:15;1430:2;1423:5;1410:59;1399:70;;1385:94;;;;;:::o;1491:261::-;1560:19;1730:4;1724:11;1717:4;1711;1707:15;1704:1;1697:39;1682:54;;1668:78;;;:::o;430:752:10:-;568:16;600:17;673:8;683:6;620:70;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;620:70:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;620:70:10;600:90;;867:1;864;857:4;851:11;844:4;838;834:15;831:1;824:5;816;811:3;807:15;802:67;899:4;893:11;940:14;937:1;932:3;917:38;975:14;1008:1;1003:33;;;;1054:4;1049:76;;;;1163:1;1148:16;;968:198;;1003:33;1027:7;1012:22;;1003:33;;1049:76;1116:3;1110:10;1103:18;1093:7;1086:15;1083:39;1076:47;1061:62;;968:198;;773:403;;;;;;;;:::o", "source": "pragma solidity 0.4.24;\nimport \"./base/BaseSafe.sol\";\nimport \"./common/MasterCopy.sol\";\nimport \"./common/SignatureDecoder.sol\";\nimport \"./common/SecuredTokenTransfer.sol\";\nimport \"./interfaces/ISignatureValidator.sol\";\n\n/// @title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191.\n/// @author Stefan George - \n/// @author Richard Meissner - \n/// @author Ricardo Guilherme Schmidt - (Status Research & Development GmbH) - Gas Token Payment\ncontract GnosisSafe is MasterCopy, BaseSafe, SignatureDecoder, SecuredTokenTransfer, ISignatureValidator {\n\n string public constant NAME = \"Gnosis Safe\";\n string public constant VERSION = \"0.0.2\";\n\n //keccak256(\n // \"EIP712Domain(address verifyingContract)\"\n //);\n bytes32 public constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749;\n\n //keccak256(\n // \"SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 dataGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)\"\n //);\n bytes32 public constant SAFE_TX_TYPEHASH = 0x14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b20;\n\n //keccak256(\n // \"SafeMessage(bytes message)\"\n //);\n bytes32 public constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;\n\n event ExecutionFailed(bytes32 txHash);\n\n uint256 public nonce;\n bytes32 public domainSeparator;\n // Mapping to keep track of all message hashes that have been approve by ALL REQUIRED owners\n mapping(bytes32 => uint256) public signedMessages;\n // Mapping to keep track of all hashes (message or transaction) that have been approve by ANY owners\n mapping(address => mapping(bytes32 => uint256)) public approvedHashes;\n\n /// @dev Setup function sets initial storage of contract.\n /// @param _owners List of Safe owners.\n /// @param _threshold Number of required confirmations for a Safe transaction.\n /// @param to Contract address for optional delegate call.\n /// @param data Data payload for optional delegate call.\n function setup(address[] _owners, uint256 _threshold, address to, bytes data)\n public\n {\n require(domainSeparator == 0, \"Domain Separator already set!\");\n domainSeparator = keccak256(abi.encode(DOMAIN_SEPARATOR_TYPEHASH, this));\n setupSafe(_owners, _threshold, to, data);\n }\n\n /// @dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction.\n /// Note: The fees are always transfered, even if the user transaction fails.\n /// @param to Destination address of Safe transaction.\n /// @param value Ether value of Safe transaction.\n /// @param data Data payload of Safe transaction.\n /// @param operation Operation type of Safe transaction.\n /// @param safeTxGas Gas that should be used for the Safe transaction.\n /// @param dataGas Gas costs for data used to trigger the safe transaction and to pay the payment transfer\n /// @param gasPrice Gas price that should be used for the payment calculation.\n /// @param gasToken Token address (or 0 if ETH) that is used for the payment.\n /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n /// @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v})\n function execTransaction(\n address to,\n uint256 value,\n bytes data,\n Enum.Operation operation,\n uint256 safeTxGas,\n uint256 dataGas,\n uint256 gasPrice,\n address gasToken,\n address refundReceiver,\n bytes signatures\n )\n public\n returns (bool success)\n {\n uint256 startGas = gasleft();\n bytes memory txHashData = encodeTransactionData(\n to, value, data, operation, // Transaction info\n safeTxGas, dataGas, gasPrice, gasToken, refundReceiver, // Payment info\n nonce\n );\n require(checkSignatures(keccak256(txHashData), txHashData, signatures, true), \"Invalid signatures provided\");\n // Increase nonce and execute transaction.\n nonce++;\n require(gasleft() >= safeTxGas, \"Not enough gas to execute safe transaction\");\n // If no safeTxGas has been set and the gasPrice is 0 we assume that all available gas can be used\n success = execute(to, value, data, operation, safeTxGas == 0 && gasPrice == 0 ? gasleft() : safeTxGas);\n if (!success) {\n emit ExecutionFailed(keccak256(txHashData));\n }\n\n // We transfer the calculated tx costs to the tx.origin to avoid sending it to intermediate contracts that have made calls\n if (gasPrice > 0) {\n handlePayment(startGas, dataGas, gasPrice, gasToken, refundReceiver);\n }\n }\n\n function handlePayment(\n uint256 gasUsed,\n uint256 dataGas,\n uint256 gasPrice,\n address gasToken,\n address refundReceiver\n )\n private\n {\n uint256 amount = ((gasUsed - gasleft()) + dataGas) * gasPrice;\n // solium-disable-next-line security/no-tx-origin\n address receiver = refundReceiver == address(0) ? tx.origin : refundReceiver;\n if (gasToken == address(0)) {\n // solium-disable-next-line security/no-send\n require(receiver.send(amount), \"Could not pay gas costs with ether\");\n } else {\n require(transferToken(gasToken, receiver, amount), \"Could not pay gas costs with token\");\n }\n }\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data, hash\n * @param dataHash Hash of the data (could be either a message hash or transaction hash)\n * @param data That should be signed (this is passed to an external validator contract)\n * @param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash.\n * @param consumeHash Indicates that in case of an approved hash the storage can be freed to save gas\n * @return a bool upon valid or invalid signature with corresponding _data\n */\n function checkSignatures(bytes32 dataHash, bytes data, bytes signatures, bool consumeHash)\n internal\n returns (bool)\n {\n // Check that the provided signature data is not too short\n if (signatures.length < threshold * 65) {\n return false;\n }\n // There cannot be an owner with address 0.\n address lastOwner = address(0);\n address currentOwner;\n uint8 v;\n bytes32 r;\n bytes32 s;\n uint256 i;\n for (i = 0; i < threshold; i++) {\n (v, r, s) = signatureSplit(signatures, i);\n // If v is 0 then it is a contract signature\n if (v == 0) {\n // When handling contract signatures the address of the contract is encoded into r\n currentOwner = address(r);\n bytes memory contractSignature;\n // solium-disable-next-line security/no-inline-assembly\n assembly {\n // The signature data for contract signatures is appended to the concatenated signatures and the offset is stored in s\n contractSignature := add(add(signatures, s), 0x20)\n }\n if (!ISignatureValidator(currentOwner).isValidSignature(data, contractSignature)) {\n return false;\n }\n // If v is 1 then it is an approved hash\n } else if (v == 1) {\n // When handling approved hashes the address of the approver is encoded into r\n currentOwner = address(r);\n // Hashes are automatically approved by the sender of the message or when they have been pre-approved via a separate transaction\n if (msg.sender != currentOwner && approvedHashes[currentOwner][dataHash] == 0) {\n return false;\n }\n // Hash has been marked for consumption. If this hash was pre-approved free storage\n if (consumeHash && msg.sender != currentOwner) {\n approvedHashes[currentOwner][dataHash] = 0;\n }\n } else {\n // Use ecrecover with the messageHash for EOA signatures\n currentOwner = ecrecover(dataHash, v, r, s);\n }\n if (currentOwner <= lastOwner || owners[currentOwner] == 0) {\n return false;\n }\n lastOwner = currentOwner;\n }\n return true;\n }\n\n /// @dev Allows to estimate a Safe transaction.\n /// This method is only meant for estimation purpose, therfore two different protection mechanism against execution in a transaction have been made:\n /// 1.) The method can only be called from the safe itself\n /// 2.) The response is returned with a revert\n /// When estimating set `from` to the address of the safe.\n /// Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction`\n /// @param to Destination address of Safe transaction.\n /// @param value Ether value of Safe transaction.\n /// @param data Data payload of Safe transaction.\n /// @param operation Operation type of Safe transaction.\n /// @return Estimate without refunds and overhead fees (base transaction and payload data gas costs).\n function requiredTxGas(address to, uint256 value, bytes data, Enum.Operation operation)\n public\n authorized\n returns (uint256)\n {\n uint256 startGas = gasleft();\n // We don't provide an error message here, as we use it to return the estimate\n // solium-disable-next-line error-reason\n require(execute(to, value, data, operation, gasleft()));\n uint256 requiredGas = startGas - gasleft();\n // Convert response to string and return via error message\n revert(string(abi.encodePacked(requiredGas)));\n }\n\n /**\n * @dev Marks a hash as approved. This can be used to validate a hash that is used by a signature.\n * @param hashToApprove The hash that should be marked as approved for signatures that are verified by this contract.\n */\n function approveHash(bytes32 hashToApprove)\n public\n {\n require(owners[msg.sender] != 0, \"Only owners can approve a hash\");\n approvedHashes[msg.sender][hashToApprove] = 1;\n }\n\n /**\n * @dev Marks a message as signed\n * @param _data Arbitrary length data that should be marked as signed on the behalf of address(this)\n */\n function signMessage(bytes _data)\n public\n authorized\n {\n signedMessages[getMessageHash(_data)] = 1;\n }\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _data Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return a bool upon valid or invalid signature with corresponding _data\n */\n function isValidSignature(bytes _data, bytes _signature)\n public\n returns (bool isValid)\n {\n bytes32 messageHash = getMessageHash(_data);\n if (_signature.length == 0) {\n isValid = signedMessages[messageHash] != 0;\n } else {\n // consumeHash needs to be false, as the state should not be changed\n isValid = checkSignatures(messageHash, _data, _signature, false);\n }\n }\n\n /// @dev Returns hash of a message that can be signed by owners.\n /// @param message Message that should be hashed\n /// @return Message hash.\n function getMessageHash(\n bytes message\n )\n public\n view\n returns (bytes32)\n {\n bytes32 safeMessageHash = keccak256(\n abi.encode(SAFE_MSG_TYPEHASH, keccak256(message))\n );\n return keccak256(\n abi.encodePacked(byte(0x19), byte(1), domainSeparator, safeMessageHash)\n );\n }\n\n /// @dev Returns the bytes that are hashed to be signed by owners.\n /// @param to Destination address.\n /// @param value Ether value.\n /// @param data Data payload.\n /// @param operation Operation type.\n /// @param safeTxGas Fas that should be used for the safe transaction.\n /// @param dataGas Gas costs for data used to trigger the safe transaction.\n /// @param gasPrice Maximum gas price that should be used for this transaction.\n /// @param gasToken Token address (or 0 if ETH) that is used for the payment.\n /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n /// @param _nonce Transaction nonce.\n /// @return Transaction hash bytes.\n function encodeTransactionData(\n address to,\n uint256 value,\n bytes data,\n Enum.Operation operation,\n uint256 safeTxGas,\n uint256 dataGas,\n uint256 gasPrice,\n address gasToken,\n address refundReceiver,\n uint256 _nonce\n )\n public\n view\n returns (bytes)\n {\n bytes32 safeTxHash = keccak256(\n abi.encode(SAFE_TX_TYPEHASH, to, value, keccak256(data), operation, safeTxGas, dataGas, gasPrice, gasToken, refundReceiver, _nonce)\n );\n return abi.encodePacked(byte(0x19), byte(1), domainSeparator, safeTxHash);\n }\n\n /// @dev Returns hash to be signed by owners.\n /// @param to Destination address.\n /// @param value Ether value.\n /// @param data Data payload.\n /// @param operation Operation type.\n /// @param safeTxGas Fas that should be used for the safe transaction.\n /// @param dataGas Gas costs for data used to trigger the safe transaction.\n /// @param gasPrice Maximum gas price that should be used for this transaction.\n /// @param gasToken Token address (or 0 if ETH) that is used for the payment.\n /// @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n /// @param _nonce Transaction nonce.\n /// @return Transaction hash.\n function getTransactionHash(\n address to,\n uint256 value,\n bytes data,\n Enum.Operation operation,\n uint256 safeTxGas,\n uint256 dataGas,\n uint256 gasPrice,\n address gasToken,\n address refundReceiver,\n uint256 _nonce\n )\n public\n view\n returns (bytes32)\n {\n return keccak256(encodeTransactionData(to, value, data, operation, safeTxGas, dataGas, gasPrice, gasToken, refundReceiver, _nonce));\n }\n}\n", "sourcePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/GnosisSafe.sol", "ast": { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/GnosisSafe.sol", "exportedSymbols": { "GnosisSafe": [ 692 ] }, "id": 693, "nodeType": "SourceUnit", "nodes": [ { "id": 1, "literals": [ "solidity", "0.4", ".24" ], "nodeType": "PragmaDirective", "src": "0:23:0" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/base/BaseSafe.sol", "file": "./base/BaseSafe.sol", "id": 2, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 783, "src": "24:29:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/common/MasterCopy.sol", "file": "./common/MasterCopy.sol", "id": 3, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1694, "src": "54:33:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/common/SignatureDecoder.sol", "file": "./common/SignatureDecoder.sol", "id": 4, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1792, "src": "88:39:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/common/SecuredTokenTransfer.sol", "file": "./common/SecuredTokenTransfer.sol", "id": 5, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1719, "src": "128:43:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/interfaces/ISignatureValidator.sol", "file": "./interfaces/ISignatureValidator.sol", "id": 6, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1804, "src": "172:46:0", "symbolAliases": [], "unitAlias": "" }, { "baseContracts": [ { "arguments": null, "baseName": { "contractScope": null, "id": 7, "name": "MasterCopy", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1693, "src": "557:10:0", "typeDescriptions": { "typeIdentifier": "t_contract$_MasterCopy_$1693", "typeString": "contract MasterCopy" } }, "id": 8, "nodeType": "InheritanceSpecifier", "src": "557:10:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 9, "name": "BaseSafe", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 782, "src": "569:8:0", "typeDescriptions": { "typeIdentifier": "t_contract$_BaseSafe_$782", "typeString": "contract BaseSafe" } }, "id": 10, "nodeType": "InheritanceSpecifier", "src": "569:8:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 11, "name": "SignatureDecoder", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1791, "src": "579:16:0", "typeDescriptions": { "typeIdentifier": "t_contract$_SignatureDecoder_$1791", "typeString": "contract SignatureDecoder" } }, "id": 12, "nodeType": "InheritanceSpecifier", "src": "579:16:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 13, "name": "SecuredTokenTransfer", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1718, "src": "597:20:0", "typeDescriptions": { "typeIdentifier": "t_contract$_SecuredTokenTransfer_$1718", "typeString": "contract SecuredTokenTransfer" } }, "id": 14, "nodeType": "InheritanceSpecifier", "src": "597:20:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 15, "name": "ISignatureValidator", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1803, "src": "619:19:0", "typeDescriptions": { "typeIdentifier": "t_contract$_ISignatureValidator_$1803", "typeString": "contract ISignatureValidator" } }, "id": 16, "nodeType": "InheritanceSpecifier", "src": "619:19:0" } ], "contractDependencies": [ 782, 892, 1212, 1652, 1666, 1693, 1718, 1735, 1791, 1803 ], "contractKind": "contract", "documentation": "@title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191.\n @author Stefan George - \n @author Richard Meissner - \n @author Ricardo Guilherme Schmidt - (Status Research & Development GmbH) - Gas Token Payment", "fullyImplemented": true, "id": 692, "linearizedBaseContracts": [ 692, 1803, 1718, 1791, 782, 1652, 1212, 892, 1666, 1693, 1735 ], "name": "GnosisSafe", "nodeType": "ContractDefinition", "nodes": [ { "constant": true, "id": 19, "name": "NAME", "nodeType": "VariableDeclaration", "scope": 692, "src": "646:43:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string" }, "typeName": { "id": 17, "name": "string", "nodeType": "ElementaryTypeName", "src": "646:6:0", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": { "argumentTypes": null, "hexValue": "476e6f7369732053616665", "id": 18, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "676:13:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_72ec6775392f699e8ffd72b7c600556d49bdc746bf22bce93d3ae6019cdaff63", "typeString": "literal_string \"Gnosis Safe\"" }, "value": "Gnosis Safe" }, "visibility": "public" }, { "constant": true, "id": 22, "name": "VERSION", "nodeType": "VariableDeclaration", "scope": 692, "src": "695:40:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string" }, "typeName": { "id": 20, "name": "string", "nodeType": "ElementaryTypeName", "src": "695:6:0", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": { "argumentTypes": null, "hexValue": "302e302e32", "id": 21, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "728:7:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be74", "typeString": "literal_string \"0.0.2\"" }, "value": "0.0.2" }, "visibility": "public" }, { "constant": true, "id": 25, "name": "DOMAIN_SEPARATOR_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 692, "src": "820:118:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 23, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "820:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "307830333561666638336438363933376433356233326530346630646463366666343639323930656566326631623639326438613831356338393430346434373439", "id": 24, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "872:66:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1517718281442037948617199096126532355110765202990829672390711201829802035017_by_1", "typeString": "int_const 1517...(68 digits omitted)...5017" }, "value": "0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749" }, "visibility": "public" }, { "constant": true, "id": 28, "name": "SAFE_TX_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 692, "src": "1148:109:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 26, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1148:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "307831346434363162633734313233363765393234363337623336336337626632396238663437653266383438363966343432366535363333643861663437623230", "id": 27, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1191:66:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_9421503099487675527562227662599058764916562750590033657944341861770225548064_by_1", "typeString": "int_const 9421...(68 digits omitted)...8064" }, "value": "0x14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b20" }, "visibility": "public" }, { "constant": true, "id": 31, "name": "SAFE_MSG_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 692, "src": "1329:110:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 29, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1329:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "307836306233636266386234613232336436386436343162336236646466396132393865376633333731306366336433613964313134366235613631353066626361", "id": 30, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1373:66:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_43739706848186989041152069077571617734008543096732098246335109361212071148490_by_1", "typeString": "int_const 4373...(69 digits omitted)...8490" }, "value": "0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca" }, "visibility": "public" }, { "anonymous": false, "documentation": null, "id": 35, "name": "ExecutionFailed", "nodeType": "EventDefinition", "parameters": { "id": 34, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 33, "indexed": false, "name": "txHash", "nodeType": "VariableDeclaration", "scope": 35, "src": "1468:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 32, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1468:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "1467:16:0" }, "src": "1446:38:0" }, { "constant": false, "id": 37, "name": "nonce", "nodeType": "VariableDeclaration", "scope": 692, "src": "1490:20:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 36, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1490:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "public" }, { "constant": false, "id": 39, "name": "domainSeparator", "nodeType": "VariableDeclaration", "scope": 692, "src": "1516:30:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 38, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1516:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "public" }, { "constant": false, "id": 43, "name": "signedMessages", "nodeType": "VariableDeclaration", "scope": 692, "src": "1649:49:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "typeName": { "id": 42, "keyType": { "id": 40, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1657:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", "src": "1649:27:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "valueType": { "id": 41, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1668:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } }, "value": null, "visibility": "public" }, { "constant": false, "id": 49, "name": "approvedHashes", "nodeType": "VariableDeclaration", "scope": 692, "src": "1809:69:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" }, "typeName": { "id": 48, "keyType": { "id": 44, "name": "address", "nodeType": "ElementaryTypeName", "src": "1817:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", "src": "1809:47:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" }, "valueType": { "id": 47, "keyType": { "id": 45, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1836:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", "src": "1828:27:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "valueType": { "id": 46, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1847:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } } }, "value": null, "visibility": "public" }, { "body": { "id": 85, "nodeType": "Block", "src": "2295:211:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "id": 64, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 62, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "2313:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 63, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "2332:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "2313:20:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "446f6d61696e20536570617261746f7220616c72656164792073657421", "id": 65, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2335:31:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_a2e1f2db9cd32eaa6a2caa3d6caa726a30dc0417d866440bfe13d6a6d030e5e2", "typeString": "literal_string \"Domain Separator already set!\"" }, "value": "Domain Separator already set!" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_a2e1f2db9cd32eaa6a2caa3d6caa726a30dc0417d866440bfe13d6a6d030e5e2", "typeString": "literal_string \"Domain Separator already set!\"" } ], "id": 61, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "2305:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 66, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2305:62:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 67, "nodeType": "ExpressionStatement", "src": "2305:62:0" }, { "expression": { "argumentTypes": null, "id": 76, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 68, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "2377:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 72, "name": "DOMAIN_SEPARATOR_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 25, "src": "2416:25:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 73, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4052, "src": "2443:4:0", "typeDescriptions": { "typeIdentifier": "t_contract$_GnosisSafe_$692", "typeString": "contract GnosisSafe" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_contract$_GnosisSafe_$692", "typeString": "contract GnosisSafe" } ], "expression": { "argumentTypes": null, "id": 70, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "2405:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 71, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2405:10:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 74, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2405:43:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 69, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "2395:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 75, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2395:54:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "src": "2377:72:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "id": 77, "nodeType": "ExpressionStatement", "src": "2377:72:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 79, "name": "_owners", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, "src": "2469:7:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" } }, { "argumentTypes": null, "id": 80, "name": "_threshold", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 54, "src": "2478:10:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 81, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 56, "src": "2490:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 82, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, "src": "2494:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 78, "name": "setupSafe", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 781, "src": "2459:9:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$", "typeString": "function (address[] memory,uint256,address,bytes memory)" } }, "id": 83, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2459:40:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 84, "nodeType": "ExpressionStatement", "src": "2459:40:0" } ] }, "documentation": "@dev Setup function sets initial storage of contract.\n @param _owners List of Safe owners.\n @param _threshold Number of required confirmations for a Safe transaction.\n @param to Contract address for optional delegate call.\n @param data Data payload for optional delegate call.", "id": 86, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "setup", "nodeType": "FunctionDefinition", "parameters": { "id": 59, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 52, "name": "_owners", "nodeType": "VariableDeclaration", "scope": 86, "src": "2213:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[]" }, "typeName": { "baseType": { "id": 50, "name": "address", "nodeType": "ElementaryTypeName", "src": "2213:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 51, "length": null, "nodeType": "ArrayTypeName", "src": "2213:9:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 54, "name": "_threshold", "nodeType": "VariableDeclaration", "scope": 86, "src": "2232:18:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 53, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2232:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 56, "name": "to", "nodeType": "VariableDeclaration", "scope": 86, "src": "2252:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 55, "name": "address", "nodeType": "ElementaryTypeName", "src": "2252:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 58, "name": "data", "nodeType": "VariableDeclaration", "scope": 86, "src": "2264:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 57, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "2264:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "2212:63:0" }, "payable": false, "returnParameters": { "id": 60, "nodeType": "ParameterList", "parameters": [], "src": "2295:0:0" }, "scope": 692, "src": "2198:308:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 197, "nodeType": "Block", "src": "3833:1110:0", "statements": [ { "assignments": [ 112 ], "declarations": [ { "constant": false, "id": 112, "name": "startGas", "nodeType": "VariableDeclaration", "scope": 198, "src": "3843:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 111, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3843:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 115, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 113, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "3862:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 114, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3862:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "3843:28:0" }, { "assignments": [ 117 ], "declarations": [ { "constant": false, "id": 117, "name": "txHashData", "nodeType": "VariableDeclaration", "scope": 198, "src": "3881:23:0", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 116, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3881:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "id": 130, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 119, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 88, "src": "3942:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 120, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 90, "src": "3946:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 121, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 92, "src": "3953:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 122, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 94, "src": "3959:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "id": 123, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4002:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 124, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 98, "src": "4013:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 125, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4022:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 126, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 102, "src": "4032:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 127, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 104, "src": "4042:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 128, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "4086:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 118, "name": "encodeTransactionData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 650, "src": "3907:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view returns (bytes memory)" } }, "id": 129, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3907:194:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "nodeType": "VariableDeclarationStatement", "src": "3881:220:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 134, "name": "txHashData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 117, "src": "4145:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 133, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "4135:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 135, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4135:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 136, "name": "txHashData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 117, "src": "4158:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 137, "name": "signatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 106, "src": "4170:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "hexValue": "74727565", "id": 138, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "4182:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 132, "name": "checkSignatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 428, "src": "4119:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_bool_$", "typeString": "function (bytes32,bytes memory,bytes memory,bool) returns (bool)" } }, "id": 139, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4119:68:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "496e76616c6964207369676e6174757265732070726f7669646564", "id": 140, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4189:29:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_85bcea44c930431ef19052d068cc504a81260341ae6c5ee84bb5a38ec55acf05", "typeString": "literal_string \"Invalid signatures provided\"" }, "value": "Invalid signatures provided" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_85bcea44c930431ef19052d068cc504a81260341ae6c5ee84bb5a38ec55acf05", "typeString": "literal_string \"Invalid signatures provided\"" } ], "id": 131, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "4111:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 141, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4111:108:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 142, "nodeType": "ExpressionStatement", "src": "4111:108:0" }, { "expression": { "argumentTypes": null, "id": 144, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "4280:7:0", "subExpression": { "argumentTypes": null, "id": 143, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "4280:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 145, "nodeType": "ExpressionStatement", "src": "4280:7:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 150, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 147, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "4305:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 148, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4305:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": { "argumentTypes": null, "id": 149, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4318:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "4305:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4e6f7420656e6f7567682067617320746f20657865637574652073616665207472616e73616374696f6e", "id": 151, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4329:44:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e7ccb05a0f2c66d12451cdfc6bbab488c38ab704d0f6af9ad18763542e9e5f18", "typeString": "literal_string \"Not enough gas to execute safe transaction\"" }, "value": "Not enough gas to execute safe transaction" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_e7ccb05a0f2c66d12451cdfc6bbab488c38ab704d0f6af9ad18763542e9e5f18", "typeString": "literal_string \"Not enough gas to execute safe transaction\"" } ], "id": 146, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "4297:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 152, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4297:77:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 153, "nodeType": "ExpressionStatement", "src": "4297:77:0" }, { "expression": { "argumentTypes": null, "id": 172, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 154, "name": "success", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 109, "src": "4491:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 156, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 88, "src": "4509:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 157, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 90, "src": "4513:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 158, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 92, "src": "4520:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 159, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 94, "src": "4526:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 166, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 162, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 160, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4537:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 161, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4550:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "4537:14:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 165, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 163, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4555:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 164, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4567:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "4555:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "4537:31:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseExpression": { "argumentTypes": null, "id": 169, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4583:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 170, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "4537:55:0", "trueExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 167, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "4571:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 168, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4571:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 155, "name": "execute", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 854, "src": "4501:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)" } }, "id": 171, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4501:92:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "4491:102:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 173, "nodeType": "ExpressionStatement", "src": "4491:102:0" }, { "condition": { "argumentTypes": null, "id": 175, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "4607:8:0", "subExpression": { "argumentTypes": null, "id": 174, "name": "success", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 109, "src": "4608:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 183, "nodeType": "IfStatement", "src": "4603:82:0", "trueBody": { "id": 182, "nodeType": "Block", "src": "4617:68:0", "statements": [ { "eventCall": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 178, "name": "txHashData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 117, "src": "4662:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 177, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "4652:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 179, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4652:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 176, "name": "ExecutionFailed", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 35, "src": "4636:15:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", "typeString": "function (bytes32)" } }, "id": 180, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4636:38:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 181, "nodeType": "EmitStatement", "src": "4631:43:0" } ] } }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 186, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 184, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4830:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 185, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4841:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "4830:12:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 196, "nodeType": "IfStatement", "src": "4826:111:0", "trueBody": { "id": 195, "nodeType": "Block", "src": "4844:93:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 188, "name": "startGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 112, "src": "4872:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 189, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 98, "src": "4882:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 190, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4891:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 191, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 102, "src": "4901:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 192, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 104, "src": "4911:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 187, "name": "handlePayment", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 262, "src": "4858:13:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$returns$__$", "typeString": "function (uint256,uint256,uint256,address,address)" } }, "id": 193, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4858:68:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 194, "nodeType": "ExpressionStatement", "src": "4858:68:0" } ] } } ] }, "documentation": "@dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction.\n Note: The fees are always transfered, even if the user transaction fails.\n @param to Destination address of Safe transaction.\n @param value Ether value of Safe transaction.\n @param data Data payload of Safe transaction.\n @param operation Operation type of Safe transaction.\n @param safeTxGas Gas that should be used for the Safe transaction.\n @param dataGas Gas costs for data used to trigger the safe transaction and to pay the payment transfer\n @param gasPrice Gas price that should be used for the payment calculation.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v})", "id": 198, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "execTransaction", "nodeType": "FunctionDefinition", "parameters": { "id": 107, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 88, "name": "to", "nodeType": "VariableDeclaration", "scope": 198, "src": "3527:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 87, "name": "address", "nodeType": "ElementaryTypeName", "src": "3527:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 90, "name": "value", "nodeType": "VariableDeclaration", "scope": 198, "src": "3547:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 89, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3547:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 92, "name": "data", "nodeType": "VariableDeclaration", "scope": 198, "src": "3570:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 91, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3570:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 94, "name": "operation", "nodeType": "VariableDeclaration", "scope": 198, "src": "3590:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 93, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "3590:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 96, "name": "safeTxGas", "nodeType": "VariableDeclaration", "scope": 198, "src": "3624:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 95, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3624:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 98, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 198, "src": "3651:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 97, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3651:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 100, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 198, "src": "3676:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 99, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3676:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 102, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 198, "src": "3702:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 101, "name": "address", "nodeType": "ElementaryTypeName", "src": "3702:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 104, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 198, "src": "3728:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 103, "name": "address", "nodeType": "ElementaryTypeName", "src": "3728:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 106, "name": "signatures", "nodeType": "VariableDeclaration", "scope": 198, "src": "3760:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 105, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3760:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "3517:265:0" }, "payable": false, "returnParameters": { "id": 110, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 109, "name": "success", "nodeType": "VariableDeclaration", "scope": 198, "src": "3815:12:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 108, "name": "bool", "nodeType": "ElementaryTypeName", "src": "3815:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "3814:14:0" }, "scope": 692, "src": "3493:1450:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 261, "nodeType": "Block", "src": "5132:532:0", "statements": [ { "assignments": [ 212 ], "declarations": [ { "constant": false, "id": 212, "name": "amount", "nodeType": "VariableDeclaration", "scope": 262, "src": "5142:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 211, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5142:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 223, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 222, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "components": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 219, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "components": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 216, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 213, "name": "gasUsed", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 200, "src": "5161:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 214, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "5171:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 215, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5171:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "5161:19:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "id": 217, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "5160:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": { "argumentTypes": null, "id": 218, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 202, "src": "5184:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "5160:31:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "id": 220, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "5159:33:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": { "argumentTypes": null, "id": 221, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 204, "src": "5195:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "5159:44:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "5142:61:0" }, { "assignments": [ 225 ], "declarations": [ { "constant": false, "id": 225, "name": "receiver", "nodeType": "VariableDeclaration", "scope": 262, "src": "5271:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 224, "name": "address", "nodeType": "ElementaryTypeName", "src": "5271:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 235, "initialValue": { "argumentTypes": null, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 230, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 226, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 208, "src": "5290:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", "id": 228, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5316:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" } ], "id": 227, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5308:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 229, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5308:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "5290:28:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseExpression": { "argumentTypes": null, "id": 233, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 208, "src": "5333:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 234, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "5290:57:0", "trueExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 231, "name": "tx", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4027, "src": "5321:2:0", "typeDescriptions": { "typeIdentifier": "t_magic_transaction", "typeString": "tx" } }, "id": 232, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "origin", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "5321:9:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", "src": "5271:76:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 240, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 236, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 206, "src": "5361:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", "id": 238, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5381:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" } ], "id": 237, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5373:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 239, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5373:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "5361:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "id": 259, "nodeType": "Block", "src": "5545:113:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 252, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 206, "src": "5581:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 253, "name": "receiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 225, "src": "5591:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 254, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 212, "src": "5601:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 251, "name": "transferToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1717, "src": "5567:13:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) returns (bool)" } }, "id": 255, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5567:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "436f756c64206e6f74207061792067617320636f737473207769746820746f6b656e", "id": 256, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5610:36:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_8560a13547eca5648355c8db1a9f8653b6f657d31d476c36bca25e47b45b08f4", "typeString": "literal_string \"Could not pay gas costs with token\"" }, "value": "Could not pay gas costs with token" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_8560a13547eca5648355c8db1a9f8653b6f657d31d476c36bca25e47b45b08f4", "typeString": "literal_string \"Could not pay gas costs with token\"" } ], "id": 250, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "5559:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 257, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5559:88:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 258, "nodeType": "ExpressionStatement", "src": "5559:88:0" } ] }, "id": 260, "nodeType": "IfStatement", "src": "5357:301:0", "trueBody": { "id": 249, "nodeType": "Block", "src": "5385:154:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 244, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 212, "src": "5482:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 242, "name": "receiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 225, "src": "5468:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 243, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "send", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "5468:13:0", "typeDescriptions": { "typeIdentifier": "t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) returns (bool)" } }, "id": 245, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5468:21:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "436f756c64206e6f74207061792067617320636f7374732077697468206574686572", "id": 246, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5491:36:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e2a11e15f7be1214c1340779ad55027af8aa33aee6cb521776a28a0a44aea377", "typeString": "literal_string \"Could not pay gas costs with ether\"" }, "value": "Could not pay gas costs with ether" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_e2a11e15f7be1214c1340779ad55027af8aa33aee6cb521776a28a0a44aea377", "typeString": "literal_string \"Could not pay gas costs with ether\"" } ], "id": 241, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "5460:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 247, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5460:68:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 248, "nodeType": "ExpressionStatement", "src": "5460:68:0" } ] } } ] }, "documentation": null, "id": 262, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "handlePayment", "nodeType": "FunctionDefinition", "parameters": { "id": 209, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 200, "name": "gasUsed", "nodeType": "VariableDeclaration", "scope": 262, "src": "4981:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 199, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4981:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 202, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 262, "src": "5006:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 201, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5006:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 204, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 262, "src": "5031:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 203, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5031:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 206, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 262, "src": "5057:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 205, "name": "address", "nodeType": "ElementaryTypeName", "src": "5057:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 208, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 262, "src": "5083:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 207, "name": "address", "nodeType": "ElementaryTypeName", "src": "5083:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "src": "4971:140:0" }, "payable": false, "returnParameters": { "id": 210, "nodeType": "ParameterList", "parameters": [], "src": "5132:0:0" }, "scope": 692, "src": "4949:715:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "private" }, { "body": { "id": 427, "nodeType": "Block", "src": "6415:2326:0", "statements": [ { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 280, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 275, "name": "signatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 268, "src": "6496:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "id": 276, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "6496:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 279, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 277, "name": "threshold", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1242, "src": "6516:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": { "argumentTypes": null, "hexValue": "3635", "id": 278, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6528:2:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_65_by_1", "typeString": "int_const 65" }, "value": "65" }, "src": "6516:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "6496:34:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 284, "nodeType": "IfStatement", "src": "6492:77:0", "trueBody": { "id": 283, "nodeType": "Block", "src": "6532:37:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 281, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "6553:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 282, "nodeType": "Return", "src": "6546:12:0" } ] } }, { "assignments": [ 286 ], "declarations": [ { "constant": false, "id": 286, "name": "lastOwner", "nodeType": "VariableDeclaration", "scope": 428, "src": "6630:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 285, "name": "address", "nodeType": "ElementaryTypeName", "src": "6630:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 290, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", "id": 288, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6658:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" } ], "id": 287, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "6650:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 289, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6650:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", "src": "6630:30:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 292, "name": "currentOwner", "nodeType": "VariableDeclaration", "scope": 428, "src": "6670:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 291, "name": "address", "nodeType": "ElementaryTypeName", "src": "6670:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 293, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6670:20:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 295, "name": "v", "nodeType": "VariableDeclaration", "scope": 428, "src": "6700:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 294, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "6700:5:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" } ], "id": 296, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6700:7:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 298, "name": "r", "nodeType": "VariableDeclaration", "scope": 428, "src": "6717:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 297, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "6717:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 299, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6717:9:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 301, "name": "s", "nodeType": "VariableDeclaration", "scope": 428, "src": "6736:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 300, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "6736:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 302, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6736:9:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 304, "name": "i", "nodeType": "VariableDeclaration", "scope": 428, "src": "6755:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 303, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6755:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 305, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6755:9:0" }, { "body": { "id": 423, "nodeType": "Block", "src": "6806:1908:0", "statements": [ { "expression": { "argumentTypes": null, "id": 324, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "components": [ { "argumentTypes": null, "id": 316, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "6821:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 317, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "6824:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 318, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 301, "src": "6827:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "id": 319, "isConstant": false, "isInlineArray": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "TupleExpression", "src": "6820:9:0", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 321, "name": "signatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 268, "src": "6847:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 322, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6859:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 320, "name": "signatureSplit", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1790, "src": "6832:14:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "function (bytes memory,uint256) pure returns (uint8,bytes32,bytes32)" } }, "id": 323, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6832:29:0", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "src": "6820:41:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 325, "nodeType": "ExpressionStatement", "src": "6820:41:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "id": 328, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 326, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "6936:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 327, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6941:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "6936:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "id": 354, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 352, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "7691:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "31", "id": 353, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "7696:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "7691:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "id": 403, "nodeType": "Block", "src": "8399:149:0", "statements": [ { "expression": { "argumentTypes": null, "id": 401, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 394, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8490:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 396, "name": "dataHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 264, "src": "8515:8:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 397, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "8525:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 398, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "8528:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 399, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 301, "src": "8531:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 395, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4007, "src": "8505:9:0", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 400, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8505:28:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8490:43:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 402, "nodeType": "ExpressionStatement", "src": "8490:43:0" } ] }, "id": 404, "nodeType": "IfStatement", "src": "7687:861:0", "trueBody": { "id": 393, "nodeType": "Block", "src": "7699:694:0", "statements": [ { "expression": { "argumentTypes": null, "id": 359, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 355, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "7812:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 357, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "7835:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 356, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7827:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 358, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7827:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "7812:25:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 360, "nodeType": "ExpressionStatement", "src": "7812:25:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 372, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 364, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 361, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "8004:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 362, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "8004:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "id": 363, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8018:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8004:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 371, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 365, "name": "approvedHashes", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 49, "src": "8034:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" } }, "id": 367, "indexExpression": { "argumentTypes": null, "id": 366, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8049:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8034:28:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 369, "indexExpression": { "argumentTypes": null, "id": 368, "name": "dataHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 264, "src": "8063:8:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8034:38:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 370, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8076:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "8034:43:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "8004:73:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 376, "nodeType": "IfStatement", "src": "8000:132:0", "trueBody": { "id": 375, "nodeType": "Block", "src": "8079:53:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 373, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "8108:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 374, "nodeType": "Return", "src": "8101:12:0" } ] } }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 382, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 377, "name": "consumeHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 270, "src": "8253:11:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 381, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 378, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "8268:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 379, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "8268:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "id": 380, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8282:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8268:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "8253:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 392, "nodeType": "IfStatement", "src": "8249:130:0", "trueBody": { "id": 391, "nodeType": "Block", "src": "8296:83:0", "statements": [ { "expression": { "argumentTypes": null, "id": 389, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 383, "name": "approvedHashes", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 49, "src": "8318:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" } }, "id": 386, "indexExpression": { "argumentTypes": null, "id": 384, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8333:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8318:28:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 387, "indexExpression": { "argumentTypes": null, "id": 385, "name": "dataHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 264, "src": "8347:8:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "8318:38:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "30", "id": 388, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8359:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "8318:42:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 390, "nodeType": "ExpressionStatement", "src": "8318:42:0" } ] } } ] } }, "id": 405, "nodeType": "IfStatement", "src": "6932:1616:0", "trueBody": { "id": 351, "nodeType": "Block", "src": "6944:737:0", "statements": [ { "expression": { "argumentTypes": null, "id": 333, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 329, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "7061:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 331, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "7084:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 330, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7076:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 332, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7076:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "7061:25:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 334, "nodeType": "ExpressionStatement", "src": "7061:25:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 336, "name": "contractSignature", "nodeType": "VariableDeclaration", "scope": 428, "src": "7104:30:0", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 335, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "7104:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "id": 337, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "7104:30:0" }, { "externalReferences": [ { "contractSignature": { "declaration": 336, "isOffset": false, "isSlot": false, "src": "7394:17:0", "valueSize": 1 } }, { "signatures": { "declaration": 268, "isOffset": false, "isSlot": false, "src": "7423:10:0", "valueSize": 1 } }, { "s": { "declaration": 301, "isOffset": false, "isSlot": false, "src": "7435:1:0", "valueSize": 1 } } ], "id": 338, "nodeType": "InlineAssembly", "operations": "{\n contractSignature := add(add(signatures, s), 0x20)\n}", "src": "7224:257:0" }, { "condition": { "argumentTypes": null, "id": 346, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "7483:76:0", "subExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 343, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 266, "src": "7535:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 344, "name": "contractSignature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 336, "src": "7541:17:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 340, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "7504:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 339, "name": "ISignatureValidator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1803, "src": "7484:19:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_ISignatureValidator_$1803_$", "typeString": "type(contract ISignatureValidator)" } }, "id": 341, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7484:33:0", "typeDescriptions": { "typeIdentifier": "t_contract$_ISignatureValidator_$1803", "typeString": "contract ISignatureValidator" } }, "id": 342, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "isValidSignature", "nodeType": "MemberAccess", "referencedDeclaration": 1802, "src": "7484:50:0", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$", "typeString": "function (bytes memory,bytes memory) external returns (bool)" } }, "id": 345, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7484:75:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 350, "nodeType": "IfStatement", "src": "7479:135:0", "trueBody": { "id": 349, "nodeType": "Block", "src": "7561:53:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 347, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "7590:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 348, "nodeType": "Return", "src": "7583:12:0" } ] } } ] } }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 414, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 408, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 406, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8565:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": { "argumentTypes": null, "id": 407, "name": "lastOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 286, "src": "8581:9:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8565:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 413, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 409, "name": "owners", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1238, "src": "8594:6:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_address_$", "typeString": "mapping(address => address)" } }, "id": 411, "indexExpression": { "argumentTypes": null, "id": 410, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8601:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8594:20:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 412, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8618:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "8594:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "8565:54:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 418, "nodeType": "IfStatement", "src": "8561:105:0", "trueBody": { "id": 417, "nodeType": "Block", "src": "8621:45:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 415, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "8646:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 416, "nodeType": "Return", "src": "8639:12:0" } ] } }, { "expression": { "argumentTypes": null, "id": 421, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 419, "name": "lastOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 286, "src": "8679:9:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "id": 420, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8691:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8679:24:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 422, "nodeType": "ExpressionStatement", "src": "8679:24:0" } ] }, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 312, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 310, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6786:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "id": 311, "name": "threshold", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1242, "src": "6790:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "6786:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 424, "initializationExpression": { "expression": { "argumentTypes": null, "id": 308, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 306, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6779:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "30", "id": 307, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6783:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "6779:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 309, "nodeType": "ExpressionStatement", "src": "6779:5:0" }, "loopExpression": { "expression": { "argumentTypes": null, "id": 314, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "6801:3:0", "subExpression": { "argumentTypes": null, "id": 313, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6801:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 315, "nodeType": "ExpressionStatement", "src": "6801:3:0" }, "nodeType": "ForStatement", "src": "6774:1940:0" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", "id": 425, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "8730:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "functionReturnParameters": 274, "id": 426, "nodeType": "Return", "src": "8723:11:0" } ] }, "documentation": "@dev Should return whether the signature provided is valid for the provided data, hash\n@param dataHash Hash of the data (could be either a message hash or transaction hash)\n@param data That should be signed (this is passed to an external validator contract)\n@param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash.\n@param consumeHash Indicates that in case of an approved hash the storage can be freed to save gas\n@return a bool upon valid or invalid signature with corresponding _data", "id": 428, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "checkSignatures", "nodeType": "FunctionDefinition", "parameters": { "id": 271, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 264, "name": "dataHash", "nodeType": "VariableDeclaration", "scope": 428, "src": "6305:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 263, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "6305:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 266, "name": "data", "nodeType": "VariableDeclaration", "scope": 428, "src": "6323:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 265, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "6323:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 268, "name": "signatures", "nodeType": "VariableDeclaration", "scope": 428, "src": "6335:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 267, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "6335:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 270, "name": "consumeHash", "nodeType": "VariableDeclaration", "scope": 428, "src": "6353:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 269, "name": "bool", "nodeType": "ElementaryTypeName", "src": "6353:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "6304:66:0" }, "payable": false, "returnParameters": { "id": 274, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 273, "name": "", "nodeType": "VariableDeclaration", "scope": 428, "src": "6405:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 272, "name": "bool", "nodeType": "ElementaryTypeName", "src": "6405:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "6404:6:0" }, "scope": 692, "src": "6280:2461:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" }, { "body": { "id": 475, "nodeType": "Block", "src": "9804:420:0", "statements": [ { "assignments": [ 444 ], "declarations": [ { "constant": false, "id": 444, "name": "startGas", "nodeType": "VariableDeclaration", "scope": 476, "src": "9814:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 443, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9814:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 447, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 445, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "9833:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 446, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9833:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "9814:28:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 450, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 430, "src": "10004:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 451, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 432, "src": "10008:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 452, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 434, "src": "10015:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 453, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 436, "src": "10021:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 454, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "10032:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 455, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10032:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 449, "name": "execute", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 854, "src": "9996:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)" } }, "id": 456, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9996:46:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 448, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4018, "src": "9988:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 457, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9988:55:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 458, "nodeType": "ExpressionStatement", "src": "9988:55:0" }, { "assignments": [ 460 ], "declarations": [ { "constant": false, "id": 460, "name": "requiredGas", "nodeType": "VariableDeclaration", "scope": 476, "src": "10053:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 459, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10053:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 465, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 464, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 461, "name": "startGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 444, "src": "10075:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 462, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "10086:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 463, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10086:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "10075:20:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "10053:42:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 470, "name": "requiredGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 460, "src": "10203:11:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 468, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "10186:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 469, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "10186:16:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 471, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10186:29:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 467, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "10179:6:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_string_storage_ptr_$", "typeString": "type(string storage pointer)" }, "typeName": "string" }, "id": 472, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10179:37:0", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 466, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ 4020, 4021 ], "referencedDeclaration": 4021, "src": "10172:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, "id": 473, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10172:45:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 474, "nodeType": "ExpressionStatement", "src": "10172:45:0" } ] }, "documentation": "@dev Allows to estimate a Safe transaction.\n This method is only meant for estimation purpose, therfore two different protection mechanism against execution in a transaction have been made:\n 1.) The method can only be called from the safe itself\n 2.) The response is returned with a revert\n When estimating set `from` to the address of the safe.\n Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction`\n @param to Destination address of Safe transaction.\n @param value Ether value of Safe transaction.\n @param data Data payload of Safe transaction.\n @param operation Operation type of Safe transaction.\n @return Estimate without refunds and overhead fees (base transaction and payload data gas costs).", "id": 476, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, "id": 439, "modifierName": { "argumentTypes": null, "id": 438, "name": "authorized", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1734, "src": "9763:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", "src": "9763:10:0" } ], "name": "requiredTxGas", "nodeType": "FunctionDefinition", "parameters": { "id": 437, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 430, "name": "to", "nodeType": "VariableDeclaration", "scope": 476, "src": "9675:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 429, "name": "address", "nodeType": "ElementaryTypeName", "src": "9675:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 432, "name": "value", "nodeType": "VariableDeclaration", "scope": 476, "src": "9687:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 431, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9687:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 434, "name": "data", "nodeType": "VariableDeclaration", "scope": 476, "src": "9702:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 433, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "9702:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 436, "name": "operation", "nodeType": "VariableDeclaration", "scope": 476, "src": "9714:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 435, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "9714:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" } ], "src": "9674:65:0" }, "payable": false, "returnParameters": { "id": 442, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 441, "name": "", "nodeType": "VariableDeclaration", "scope": 476, "src": "9791:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 440, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9791:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "9790:9:0" }, "scope": 692, "src": "9652:572:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 500, "nodeType": "Block", "src": "10531:138:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 487, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 482, "name": "owners", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1238, "src": "10549:6:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_address_$", "typeString": "mapping(address => address)" } }, "id": 485, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 483, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "10556:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 484, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "10556:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "10549:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 486, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10571:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "10549:23:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4f6e6c79206f776e6572732063616e20617070726f766520612068617368", "id": 488, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "10574:32:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_60f21058f4a7689ef29853b3c9c17c9bf69856a949794649bb68878f00552475", "typeString": "literal_string \"Only owners can approve a hash\"" }, "value": "Only owners can approve a hash" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_60f21058f4a7689ef29853b3c9c17c9bf69856a949794649bb68878f00552475", "typeString": "literal_string \"Only owners can approve a hash\"" } ], "id": 481, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "10541:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 489, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10541:66:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 490, "nodeType": "ExpressionStatement", "src": "10541:66:0" }, { "expression": { "argumentTypes": null, "id": 498, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 491, "name": "approvedHashes", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 49, "src": "10617:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" } }, "id": 495, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 492, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "10632:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 493, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "10632:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "10617:26:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 496, "indexExpression": { "argumentTypes": null, "id": 494, "name": "hashToApprove", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 478, "src": "10644:13:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "10617:41:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "31", "id": 497, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10661:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "10617:45:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 499, "nodeType": "ExpressionStatement", "src": "10617:45:0" } ] }, "documentation": "@dev Marks a hash as approved. This can be used to validate a hash that is used by a signature.\n@param hashToApprove The hash that should be marked as approved for signatures that are verified by this contract.", "id": 501, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "approveHash", "nodeType": "FunctionDefinition", "parameters": { "id": 479, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 478, "name": "hashToApprove", "nodeType": "VariableDeclaration", "scope": 501, "src": "10489:21:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 477, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "10489:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "10488:23:0" }, "payable": false, "returnParameters": { "id": 480, "nodeType": "ParameterList", "parameters": [], "src": "10531:0:0" }, "scope": 692, "src": "10468:201:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 516, "nodeType": "Block", "src": "10903:58:0", "statements": [ { "expression": { "argumentTypes": null, "id": 514, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 508, "name": "signedMessages", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 43, "src": "10913:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 512, "indexExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 510, "name": "_data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 503, "src": "10943:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 509, "name": "getMessageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 591, "src": "10928:14:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) view returns (bytes32)" } }, "id": 511, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10928:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "10913:37:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "31", "id": 513, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10953:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "10913:41:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 515, "nodeType": "ExpressionStatement", "src": "10913:41:0" } ] }, "documentation": "@dev Marks a message as signed\n@param _data Arbitrary length data that should be marked as signed on the behalf of address(this)", "id": 517, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, "id": 506, "modifierName": { "argumentTypes": null, "id": 505, "name": "authorized", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1734, "src": "10888:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", "src": "10888:10:0" } ], "name": "signMessage", "nodeType": "FunctionDefinition", "parameters": { "id": 504, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 503, "name": "_data", "nodeType": "VariableDeclaration", "scope": 517, "src": "10852:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 502, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "10852:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "10851:13:0" }, "payable": false, "returnParameters": { "id": 507, "nodeType": "ParameterList", "parameters": [], "src": "10903:0:0" }, "scope": 692, "src": "10831:130:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 556, "nodeType": "Block", "src": "11400:340:0", "statements": [ { "assignments": [ 527 ], "declarations": [ { "constant": false, "id": 527, "name": "messageHash", "nodeType": "VariableDeclaration", "scope": 557, "src": "11410:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 526, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "11410:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 531, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 529, "name": "_data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 519, "src": "11447:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 528, "name": "getMessageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 591, "src": "11432:14:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) view returns (bytes32)" } }, "id": 530, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11432:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "11410:43:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 535, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 532, "name": "_signature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 521, "src": "11467:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "id": 533, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "11467:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 534, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11488:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "11467:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "id": 554, "nodeType": "Block", "src": "11564:170:0", "statements": [ { "expression": { "argumentTypes": null, "id": 552, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 545, "name": "isValid", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 524, "src": "11659:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 547, "name": "messageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 527, "src": "11685:11:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 548, "name": "_data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 519, "src": "11698:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 549, "name": "_signature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 521, "src": "11705:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "hexValue": "66616c7365", "id": 550, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "11717:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 546, "name": "checkSignatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 428, "src": "11669:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_bool_$", "typeString": "function (bytes32,bytes memory,bytes memory,bool) returns (bool)" } }, "id": 551, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11669:54:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "11659:64:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 553, "nodeType": "ExpressionStatement", "src": "11659:64:0" } ] }, "id": 555, "nodeType": "IfStatement", "src": "11463:271:0", "trueBody": { "id": 544, "nodeType": "Block", "src": "11491:67:0", "statements": [ { "expression": { "argumentTypes": null, "id": 542, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 536, "name": "isValid", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 524, "src": "11505:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 541, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 537, "name": "signedMessages", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 43, "src": "11515:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 539, "indexExpression": { "argumentTypes": null, "id": 538, "name": "messageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 527, "src": "11530:11:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "11515:27:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 540, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11546:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "11515:32:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "11505:42:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 543, "nodeType": "ExpressionStatement", "src": "11505:42:0" } ] } } ] }, "documentation": "@dev Should return whether the signature provided is valid for the provided data\n@param _data Arbitrary length data signed on the behalf of address(this)\n@param _signature Signature byte array associated with _data\n@return a bool upon valid or invalid signature with corresponding _data", "id": 557, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "isValidSignature", "nodeType": "FunctionDefinition", "parameters": { "id": 522, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 519, "name": "_data", "nodeType": "VariableDeclaration", "scope": 557, "src": "11319:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 518, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "11319:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 521, "name": "_signature", "nodeType": "VariableDeclaration", "scope": 557, "src": "11332:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 520, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "11332:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "11318:31:0" }, "payable": false, "returnParameters": { "id": 525, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 524, "name": "isValid", "nodeType": "VariableDeclaration", "scope": 557, "src": "11382:12:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 523, "name": "bool", "nodeType": "ElementaryTypeName", "src": "11382:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "11381:14:0" }, "scope": 692, "src": "11293:447:0", "stateMutability": "nonpayable", "superFunction": 1802, "visibility": "public" }, { "body": { "id": 590, "nodeType": "Block", "src": "12009:246:0", "statements": [ { "assignments": [ 565 ], "declarations": [ { "constant": false, "id": 565, "name": "safeMessageHash", "nodeType": "VariableDeclaration", "scope": 591, "src": "12019:23:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 564, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "12019:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 575, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 569, "name": "SAFE_MSG_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 31, "src": "12079:17:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 571, "name": "message", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 559, "src": "12108:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 570, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "12098:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 572, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12098:18:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 567, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "12068:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 568, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "12068:10:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 573, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12068:49:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 566, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "12045:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 574, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12045:82:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "12019:108:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30783139", "id": 580, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "12189:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" }, "value": "0x19" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" } ], "id": 579, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "12184:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 581, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12184:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", "id": 583, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "12201:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" } ], "id": 582, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "12196:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 584, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12196:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "id": 585, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "12205:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 586, "name": "safeMessageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 565, "src": "12222:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 577, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "12167:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 578, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "12167:16:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 587, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12167:71:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 576, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "12144:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 588, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12144:104:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 563, "id": 589, "nodeType": "Return", "src": "12137:111:0" } ] }, "documentation": "@dev Returns hash of a message that can be signed by owners.\n @param message Message that should be hashed\n @return Message hash.", "id": 591, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "getMessageHash", "nodeType": "FunctionDefinition", "parameters": { "id": 560, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 559, "name": "message", "nodeType": "VariableDeclaration", "scope": 591, "src": "11931:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 558, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "11931:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "11921:29:0" }, "payable": false, "returnParameters": { "id": 563, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 562, "name": "", "nodeType": "VariableDeclaration", "scope": 591, "src": "11996:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 561, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "11996:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "11995:9:0" }, "scope": 692, "src": "11898:357:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 649, "nodeType": "Block", "src": "13318:285:0", "statements": [ { "assignments": [ 617 ], "declarations": [ { "constant": false, "id": 617, "name": "safeTxHash", "nodeType": "VariableDeclaration", "scope": 650, "src": "13328:18:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 616, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "13328:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 636, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 621, "name": "SAFE_TX_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 28, "src": "13383:16:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 622, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 593, "src": "13401:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 623, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 595, "src": "13405:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 625, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 597, "src": "13422:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 624, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "13412:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 626, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13412:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 627, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 599, "src": "13429:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "id": 628, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 601, "src": "13440:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 629, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 603, "src": "13451:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 630, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 605, "src": "13460:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 631, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 607, "src": "13470:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 632, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 609, "src": "13480:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 633, "name": "_nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 611, "src": "13496:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 619, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "13372:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 620, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "13372:10:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 634, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13372:131:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 618, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "13349:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 635, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13349:164:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "13328:185:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30783139", "id": 640, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "13552:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" }, "value": "0x19" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" } ], "id": 639, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "13547:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 641, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13547:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", "id": 643, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "13564:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" } ], "id": 642, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "13559:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 644, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13559:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "id": 645, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "13568:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 646, "name": "safeTxHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 617, "src": "13585:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 637, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "13530:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 638, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "13530:16:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 647, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13530:66:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "functionReturnParameters": 615, "id": 648, "nodeType": "Return", "src": "13523:73:0" } ] }, "documentation": "@dev Returns the bytes that are hashed to be signed by owners.\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @param safeTxGas Fas that should be used for the safe transaction.\n @param dataGas Gas costs for data used to trigger the safe transaction.\n @param gasPrice Maximum gas price that should be used for this transaction.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param _nonce Transaction nonce.\n @return Transaction hash bytes.", "id": 650, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "encodeTransactionData", "nodeType": "FunctionDefinition", "parameters": { "id": 612, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 593, "name": "to", "nodeType": "VariableDeclaration", "scope": 650, "src": "13008:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 592, "name": "address", "nodeType": "ElementaryTypeName", "src": "13008:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 595, "name": "value", "nodeType": "VariableDeclaration", "scope": 650, "src": "13028:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 594, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13028:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 597, "name": "data", "nodeType": "VariableDeclaration", "scope": 650, "src": "13051:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 596, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "13051:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 599, "name": "operation", "nodeType": "VariableDeclaration", "scope": 650, "src": "13071:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 598, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "13071:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 601, "name": "safeTxGas", "nodeType": "VariableDeclaration", "scope": 650, "src": "13105:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 600, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13105:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 603, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 650, "src": "13132:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 602, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13132:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 605, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 650, "src": "13157:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 604, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13157:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 607, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 650, "src": "13183:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 606, "name": "address", "nodeType": "ElementaryTypeName", "src": "13183:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 609, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 650, "src": "13209:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 608, "name": "address", "nodeType": "ElementaryTypeName", "src": "13209:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 611, "name": "_nonce", "nodeType": "VariableDeclaration", "scope": 650, "src": "13241:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 610, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13241:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "12998:263:0" }, "payable": false, "returnParameters": { "id": 615, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 614, "name": "", "nodeType": "VariableDeclaration", "scope": 650, "src": "13307:5:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 613, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "13307:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "13306:7:0" }, "scope": 692, "src": "12968:635:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 690, "nodeType": "Block", "src": "14638:148:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 677, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 652, "src": "14687:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 678, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 654, "src": "14691:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 679, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 656, "src": "14698:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 680, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 658, "src": "14704:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "id": 681, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 660, "src": "14715:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 682, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 662, "src": "14726:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 683, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 664, "src": "14735:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 684, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 666, "src": "14745:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 685, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 668, "src": "14755:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 686, "name": "_nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 670, "src": "14771:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 676, "name": "encodeTransactionData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 650, "src": "14665:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view returns (bytes memory)" } }, "id": 687, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "14665:113:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 675, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "14655:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 688, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "14655:124:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 674, "id": 689, "nodeType": "Return", "src": "14648:131:0" } ] }, "documentation": "@dev Returns hash to be signed by owners.\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @param safeTxGas Fas that should be used for the safe transaction.\n @param dataGas Gas costs for data used to trigger the safe transaction.\n @param gasPrice Maximum gas price that should be used for this transaction.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param _nonce Transaction nonce.\n @return Transaction hash.", "id": 691, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "getTransactionHash", "nodeType": "FunctionDefinition", "parameters": { "id": 671, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 652, "name": "to", "nodeType": "VariableDeclaration", "scope": 691, "src": "14326:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 651, "name": "address", "nodeType": "ElementaryTypeName", "src": "14326:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 654, "name": "value", "nodeType": "VariableDeclaration", "scope": 691, "src": "14346:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 653, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14346:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 656, "name": "data", "nodeType": "VariableDeclaration", "scope": 691, "src": "14369:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 655, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "14369:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 658, "name": "operation", "nodeType": "VariableDeclaration", "scope": 691, "src": "14389:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 657, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "14389:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 660, "name": "safeTxGas", "nodeType": "VariableDeclaration", "scope": 691, "src": "14423:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 659, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14423:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 662, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 691, "src": "14450:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 661, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14450:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 664, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 691, "src": "14475:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 663, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14475:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 666, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 691, "src": "14501:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 665, "name": "address", "nodeType": "ElementaryTypeName", "src": "14501:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 668, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 691, "src": "14527:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 667, "name": "address", "nodeType": "ElementaryTypeName", "src": "14527:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 670, "name": "_nonce", "nodeType": "VariableDeclaration", "scope": 691, "src": "14559:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 669, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14559:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "14316:263:0" }, "payable": false, "returnParameters": { "id": 674, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 673, "name": "", "nodeType": "VariableDeclaration", "scope": 691, "src": "14625:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 672, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "14625:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "14624:9:0" }, "scope": 692, "src": "14289:497:0", "stateMutability": "view", "superFunction": null, "visibility": "public" } ], "scope": 693, "src": "534:14254:0" } ], "src": "0:14789:0" }, "legacyAST": { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/GnosisSafe.sol", "exportedSymbols": { "GnosisSafe": [ 692 ] }, "id": 693, "nodeType": "SourceUnit", "nodes": [ { "id": 1, "literals": [ "solidity", "0.4", ".24" ], "nodeType": "PragmaDirective", "src": "0:23:0" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/base/BaseSafe.sol", "file": "./base/BaseSafe.sol", "id": 2, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 783, "src": "24:29:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/common/MasterCopy.sol", "file": "./common/MasterCopy.sol", "id": 3, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1694, "src": "54:33:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/common/SignatureDecoder.sol", "file": "./common/SignatureDecoder.sol", "id": 4, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1792, "src": "88:39:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/common/SecuredTokenTransfer.sol", "file": "./common/SecuredTokenTransfer.sol", "id": 5, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1719, "src": "128:43:0", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "/Users/apanizo/git/gnosis/safe-contracts/contracts/interfaces/ISignatureValidator.sol", "file": "./interfaces/ISignatureValidator.sol", "id": 6, "nodeType": "ImportDirective", "scope": 693, "sourceUnit": 1804, "src": "172:46:0", "symbolAliases": [], "unitAlias": "" }, { "baseContracts": [ { "arguments": null, "baseName": { "contractScope": null, "id": 7, "name": "MasterCopy", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1693, "src": "557:10:0", "typeDescriptions": { "typeIdentifier": "t_contract$_MasterCopy_$1693", "typeString": "contract MasterCopy" } }, "id": 8, "nodeType": "InheritanceSpecifier", "src": "557:10:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 9, "name": "BaseSafe", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 782, "src": "569:8:0", "typeDescriptions": { "typeIdentifier": "t_contract$_BaseSafe_$782", "typeString": "contract BaseSafe" } }, "id": 10, "nodeType": "InheritanceSpecifier", "src": "569:8:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 11, "name": "SignatureDecoder", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1791, "src": "579:16:0", "typeDescriptions": { "typeIdentifier": "t_contract$_SignatureDecoder_$1791", "typeString": "contract SignatureDecoder" } }, "id": 12, "nodeType": "InheritanceSpecifier", "src": "579:16:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 13, "name": "SecuredTokenTransfer", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1718, "src": "597:20:0", "typeDescriptions": { "typeIdentifier": "t_contract$_SecuredTokenTransfer_$1718", "typeString": "contract SecuredTokenTransfer" } }, "id": 14, "nodeType": "InheritanceSpecifier", "src": "597:20:0" }, { "arguments": null, "baseName": { "contractScope": null, "id": 15, "name": "ISignatureValidator", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1803, "src": "619:19:0", "typeDescriptions": { "typeIdentifier": "t_contract$_ISignatureValidator_$1803", "typeString": "contract ISignatureValidator" } }, "id": 16, "nodeType": "InheritanceSpecifier", "src": "619:19:0" } ], "contractDependencies": [ 782, 892, 1212, 1652, 1666, 1693, 1718, 1735, 1791, 1803 ], "contractKind": "contract", "documentation": "@title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191.\n @author Stefan George - \n @author Richard Meissner - \n @author Ricardo Guilherme Schmidt - (Status Research & Development GmbH) - Gas Token Payment", "fullyImplemented": true, "id": 692, "linearizedBaseContracts": [ 692, 1803, 1718, 1791, 782, 1652, 1212, 892, 1666, 1693, 1735 ], "name": "GnosisSafe", "nodeType": "ContractDefinition", "nodes": [ { "constant": true, "id": 19, "name": "NAME", "nodeType": "VariableDeclaration", "scope": 692, "src": "646:43:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string" }, "typeName": { "id": 17, "name": "string", "nodeType": "ElementaryTypeName", "src": "646:6:0", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": { "argumentTypes": null, "hexValue": "476e6f7369732053616665", "id": 18, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "676:13:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_72ec6775392f699e8ffd72b7c600556d49bdc746bf22bce93d3ae6019cdaff63", "typeString": "literal_string \"Gnosis Safe\"" }, "value": "Gnosis Safe" }, "visibility": "public" }, { "constant": true, "id": 22, "name": "VERSION", "nodeType": "VariableDeclaration", "scope": 692, "src": "695:40:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string" }, "typeName": { "id": 20, "name": "string", "nodeType": "ElementaryTypeName", "src": "695:6:0", "typeDescriptions": { "typeIdentifier": "t_string_storage_ptr", "typeString": "string" } }, "value": { "argumentTypes": null, "hexValue": "302e302e32", "id": 21, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "728:7:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be74", "typeString": "literal_string \"0.0.2\"" }, "value": "0.0.2" }, "visibility": "public" }, { "constant": true, "id": 25, "name": "DOMAIN_SEPARATOR_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 692, "src": "820:118:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 23, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "820:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "307830333561666638336438363933376433356233326530346630646463366666343639323930656566326631623639326438613831356338393430346434373439", "id": 24, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "872:66:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1517718281442037948617199096126532355110765202990829672390711201829802035017_by_1", "typeString": "int_const 1517...(68 digits omitted)...5017" }, "value": "0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749" }, "visibility": "public" }, { "constant": true, "id": 28, "name": "SAFE_TX_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 692, "src": "1148:109:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 26, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1148:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "307831346434363162633734313233363765393234363337623336336337626632396238663437653266383438363966343432366535363333643861663437623230", "id": 27, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1191:66:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_9421503099487675527562227662599058764916562750590033657944341861770225548064_by_1", "typeString": "int_const 9421...(68 digits omitted)...8064" }, "value": "0x14d461bc7412367e924637b363c7bf29b8f47e2f84869f4426e5633d8af47b20" }, "visibility": "public" }, { "constant": true, "id": 31, "name": "SAFE_MSG_TYPEHASH", "nodeType": "VariableDeclaration", "scope": 692, "src": "1329:110:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 29, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1329:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": { "argumentTypes": null, "hexValue": "307836306233636266386234613232336436386436343162336236646466396132393865376633333731306366336433613964313134366235613631353066626361", "id": 30, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "1373:66:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_43739706848186989041152069077571617734008543096732098246335109361212071148490_by_1", "typeString": "int_const 4373...(69 digits omitted)...8490" }, "value": "0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca" }, "visibility": "public" }, { "anonymous": false, "documentation": null, "id": 35, "name": "ExecutionFailed", "nodeType": "EventDefinition", "parameters": { "id": 34, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 33, "indexed": false, "name": "txHash", "nodeType": "VariableDeclaration", "scope": 35, "src": "1468:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 32, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1468:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "1467:16:0" }, "src": "1446:38:0" }, { "constant": false, "id": 37, "name": "nonce", "nodeType": "VariableDeclaration", "scope": 692, "src": "1490:20:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 36, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1490:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "public" }, { "constant": false, "id": 39, "name": "domainSeparator", "nodeType": "VariableDeclaration", "scope": 692, "src": "1516:30:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 38, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1516:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "public" }, { "constant": false, "id": 43, "name": "signedMessages", "nodeType": "VariableDeclaration", "scope": 692, "src": "1649:49:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "typeName": { "id": 42, "keyType": { "id": 40, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1657:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", "src": "1649:27:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "valueType": { "id": 41, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1668:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } }, "value": null, "visibility": "public" }, { "constant": false, "id": 49, "name": "approvedHashes", "nodeType": "VariableDeclaration", "scope": 692, "src": "1809:69:0", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" }, "typeName": { "id": 48, "keyType": { "id": 44, "name": "address", "nodeType": "ElementaryTypeName", "src": "1817:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", "src": "1809:47:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" }, "valueType": { "id": 47, "keyType": { "id": 45, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "1836:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", "src": "1828:27:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "valueType": { "id": 46, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "1847:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } } }, "value": null, "visibility": "public" }, { "body": { "id": 85, "nodeType": "Block", "src": "2295:211:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "id": 64, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 62, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "2313:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 63, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "2332:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "2313:20:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "446f6d61696e20536570617261746f7220616c72656164792073657421", "id": 65, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "2335:31:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_a2e1f2db9cd32eaa6a2caa3d6caa726a30dc0417d866440bfe13d6a6d030e5e2", "typeString": "literal_string \"Domain Separator already set!\"" }, "value": "Domain Separator already set!" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_a2e1f2db9cd32eaa6a2caa3d6caa726a30dc0417d866440bfe13d6a6d030e5e2", "typeString": "literal_string \"Domain Separator already set!\"" } ], "id": 61, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "2305:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 66, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2305:62:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 67, "nodeType": "ExpressionStatement", "src": "2305:62:0" }, { "expression": { "argumentTypes": null, "id": 76, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 68, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "2377:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 72, "name": "DOMAIN_SEPARATOR_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 25, "src": "2416:25:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 73, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4052, "src": "2443:4:0", "typeDescriptions": { "typeIdentifier": "t_contract$_GnosisSafe_$692", "typeString": "contract GnosisSafe" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_contract$_GnosisSafe_$692", "typeString": "contract GnosisSafe" } ], "expression": { "argumentTypes": null, "id": 70, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "2405:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 71, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "2405:10:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 74, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2405:43:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 69, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "2395:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 75, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2395:54:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "src": "2377:72:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "id": 77, "nodeType": "ExpressionStatement", "src": "2377:72:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 79, "name": "_owners", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, "src": "2469:7:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" } }, { "argumentTypes": null, "id": 80, "name": "_threshold", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 54, "src": "2478:10:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 81, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 56, "src": "2490:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 82, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, "src": "2494:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[] memory" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 78, "name": "setupSafe", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 781, "src": "2459:9:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$", "typeString": "function (address[] memory,uint256,address,bytes memory)" } }, "id": 83, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "2459:40:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 84, "nodeType": "ExpressionStatement", "src": "2459:40:0" } ] }, "documentation": "@dev Setup function sets initial storage of contract.\n @param _owners List of Safe owners.\n @param _threshold Number of required confirmations for a Safe transaction.\n @param to Contract address for optional delegate call.\n @param data Data payload for optional delegate call.", "id": 86, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "setup", "nodeType": "FunctionDefinition", "parameters": { "id": 59, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 52, "name": "_owners", "nodeType": "VariableDeclaration", "scope": 86, "src": "2213:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", "typeString": "address[]" }, "typeName": { "baseType": { "id": 50, "name": "address", "nodeType": "ElementaryTypeName", "src": "2213:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 51, "length": null, "nodeType": "ArrayTypeName", "src": "2213:9:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", "typeString": "address[]" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 54, "name": "_threshold", "nodeType": "VariableDeclaration", "scope": 86, "src": "2232:18:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 53, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "2232:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 56, "name": "to", "nodeType": "VariableDeclaration", "scope": 86, "src": "2252:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 55, "name": "address", "nodeType": "ElementaryTypeName", "src": "2252:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 58, "name": "data", "nodeType": "VariableDeclaration", "scope": 86, "src": "2264:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 57, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "2264:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "2212:63:0" }, "payable": false, "returnParameters": { "id": 60, "nodeType": "ParameterList", "parameters": [], "src": "2295:0:0" }, "scope": 692, "src": "2198:308:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 197, "nodeType": "Block", "src": "3833:1110:0", "statements": [ { "assignments": [ 112 ], "declarations": [ { "constant": false, "id": 112, "name": "startGas", "nodeType": "VariableDeclaration", "scope": 198, "src": "3843:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 111, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3843:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 115, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 113, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "3862:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 114, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3862:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "3843:28:0" }, { "assignments": [ 117 ], "declarations": [ { "constant": false, "id": 117, "name": "txHashData", "nodeType": "VariableDeclaration", "scope": 198, "src": "3881:23:0", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 116, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3881:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "id": 130, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 119, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 88, "src": "3942:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 120, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 90, "src": "3946:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 121, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 92, "src": "3953:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 122, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 94, "src": "3959:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "id": 123, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4002:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 124, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 98, "src": "4013:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 125, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4022:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 126, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 102, "src": "4032:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 127, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 104, "src": "4042:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 128, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "4086:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 118, "name": "encodeTransactionData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 650, "src": "3907:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view returns (bytes memory)" } }, "id": 129, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "3907:194:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "nodeType": "VariableDeclarationStatement", "src": "3881:220:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 134, "name": "txHashData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 117, "src": "4145:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 133, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "4135:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 135, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4135:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 136, "name": "txHashData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 117, "src": "4158:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 137, "name": "signatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 106, "src": "4170:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "hexValue": "74727565", "id": 138, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "4182:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 132, "name": "checkSignatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 428, "src": "4119:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_bool_$", "typeString": "function (bytes32,bytes memory,bytes memory,bool) returns (bool)" } }, "id": 139, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4119:68:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "496e76616c6964207369676e6174757265732070726f7669646564", "id": 140, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4189:29:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_85bcea44c930431ef19052d068cc504a81260341ae6c5ee84bb5a38ec55acf05", "typeString": "literal_string \"Invalid signatures provided\"" }, "value": "Invalid signatures provided" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_85bcea44c930431ef19052d068cc504a81260341ae6c5ee84bb5a38ec55acf05", "typeString": "literal_string \"Invalid signatures provided\"" } ], "id": 131, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "4111:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 141, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4111:108:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 142, "nodeType": "ExpressionStatement", "src": "4111:108:0" }, { "expression": { "argumentTypes": null, "id": 144, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "4280:7:0", "subExpression": { "argumentTypes": null, "id": 143, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 37, "src": "4280:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 145, "nodeType": "ExpressionStatement", "src": "4280:7:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 150, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 147, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "4305:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 148, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4305:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">=", "rightExpression": { "argumentTypes": null, "id": 149, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4318:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "4305:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4e6f7420656e6f7567682067617320746f20657865637574652073616665207472616e73616374696f6e", "id": 151, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "4329:44:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e7ccb05a0f2c66d12451cdfc6bbab488c38ab704d0f6af9ad18763542e9e5f18", "typeString": "literal_string \"Not enough gas to execute safe transaction\"" }, "value": "Not enough gas to execute safe transaction" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_e7ccb05a0f2c66d12451cdfc6bbab488c38ab704d0f6af9ad18763542e9e5f18", "typeString": "literal_string \"Not enough gas to execute safe transaction\"" } ], "id": 146, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "4297:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 152, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4297:77:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 153, "nodeType": "ExpressionStatement", "src": "4297:77:0" }, { "expression": { "argumentTypes": null, "id": 172, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 154, "name": "success", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 109, "src": "4491:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 156, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 88, "src": "4509:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 157, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 90, "src": "4513:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 158, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 92, "src": "4520:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 159, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 94, "src": "4526:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 166, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 162, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 160, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4537:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 161, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4550:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "4537:14:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 165, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 163, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4555:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 164, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4567:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "4555:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "4537:31:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseExpression": { "argumentTypes": null, "id": 169, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 96, "src": "4583:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 170, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "4537:55:0", "trueExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 167, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "4571:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 168, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4571:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 155, "name": "execute", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 854, "src": "4501:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)" } }, "id": 171, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4501:92:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "4491:102:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 173, "nodeType": "ExpressionStatement", "src": "4491:102:0" }, { "condition": { "argumentTypes": null, "id": 175, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "4607:8:0", "subExpression": { "argumentTypes": null, "id": 174, "name": "success", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 109, "src": "4608:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 183, "nodeType": "IfStatement", "src": "4603:82:0", "trueBody": { "id": 182, "nodeType": "Block", "src": "4617:68:0", "statements": [ { "eventCall": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 178, "name": "txHashData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 117, "src": "4662:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 177, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "4652:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 179, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4652:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 176, "name": "ExecutionFailed", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 35, "src": "4636:15:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", "typeString": "function (bytes32)" } }, "id": 180, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4636:38:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 181, "nodeType": "EmitStatement", "src": "4631:43:0" } ] } }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 186, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 184, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4830:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": ">", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 185, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "4841:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "4830:12:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 196, "nodeType": "IfStatement", "src": "4826:111:0", "trueBody": { "id": 195, "nodeType": "Block", "src": "4844:93:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 188, "name": "startGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 112, "src": "4872:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 189, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 98, "src": "4882:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 190, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 100, "src": "4891:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 191, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 102, "src": "4901:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 192, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 104, "src": "4911:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 187, "name": "handlePayment", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 262, "src": "4858:13:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$returns$__$", "typeString": "function (uint256,uint256,uint256,address,address)" } }, "id": 193, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "4858:68:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 194, "nodeType": "ExpressionStatement", "src": "4858:68:0" } ] } } ] }, "documentation": "@dev Allows to execute a Safe transaction confirmed by required number of owners and then pays the account that submitted the transaction.\n Note: The fees are always transfered, even if the user transaction fails.\n @param to Destination address of Safe transaction.\n @param value Ether value of Safe transaction.\n @param data Data payload of Safe transaction.\n @param operation Operation type of Safe transaction.\n @param safeTxGas Gas that should be used for the Safe transaction.\n @param dataGas Gas costs for data used to trigger the safe transaction and to pay the payment transfer\n @param gasPrice Gas price that should be used for the payment calculation.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param signatures Packed signature data ({bytes32 r}{bytes32 s}{uint8 v})", "id": 198, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "execTransaction", "nodeType": "FunctionDefinition", "parameters": { "id": 107, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 88, "name": "to", "nodeType": "VariableDeclaration", "scope": 198, "src": "3527:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 87, "name": "address", "nodeType": "ElementaryTypeName", "src": "3527:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 90, "name": "value", "nodeType": "VariableDeclaration", "scope": 198, "src": "3547:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 89, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3547:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 92, "name": "data", "nodeType": "VariableDeclaration", "scope": 198, "src": "3570:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 91, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3570:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 94, "name": "operation", "nodeType": "VariableDeclaration", "scope": 198, "src": "3590:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 93, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "3590:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 96, "name": "safeTxGas", "nodeType": "VariableDeclaration", "scope": 198, "src": "3624:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 95, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3624:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 98, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 198, "src": "3651:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 97, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3651:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 100, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 198, "src": "3676:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 99, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "3676:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 102, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 198, "src": "3702:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 101, "name": "address", "nodeType": "ElementaryTypeName", "src": "3702:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 104, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 198, "src": "3728:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 103, "name": "address", "nodeType": "ElementaryTypeName", "src": "3728:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 106, "name": "signatures", "nodeType": "VariableDeclaration", "scope": 198, "src": "3760:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 105, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "3760:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "3517:265:0" }, "payable": false, "returnParameters": { "id": 110, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 109, "name": "success", "nodeType": "VariableDeclaration", "scope": 198, "src": "3815:12:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 108, "name": "bool", "nodeType": "ElementaryTypeName", "src": "3815:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "3814:14:0" }, "scope": 692, "src": "3493:1450:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 261, "nodeType": "Block", "src": "5132:532:0", "statements": [ { "assignments": [ 212 ], "declarations": [ { "constant": false, "id": 212, "name": "amount", "nodeType": "VariableDeclaration", "scope": 262, "src": "5142:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 211, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5142:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 223, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 222, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "components": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 219, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "components": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 216, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 213, "name": "gasUsed", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 200, "src": "5161:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 214, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "5171:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 215, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5171:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "5161:19:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "id": 217, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "5160:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "+", "rightExpression": { "argumentTypes": null, "id": 218, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 202, "src": "5184:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "5160:31:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "id": 220, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "5159:33:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": { "argumentTypes": null, "id": 221, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 204, "src": "5195:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "5159:44:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "5142:61:0" }, { "assignments": [ 225 ], "declarations": [ { "constant": false, "id": 225, "name": "receiver", "nodeType": "VariableDeclaration", "scope": 262, "src": "5271:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 224, "name": "address", "nodeType": "ElementaryTypeName", "src": "5271:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 235, "initialValue": { "argumentTypes": null, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 230, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 226, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 208, "src": "5290:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", "id": 228, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5316:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" } ], "id": 227, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5308:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 229, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5308:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "5290:28:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseExpression": { "argumentTypes": null, "id": 233, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 208, "src": "5333:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 234, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "5290:57:0", "trueExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 231, "name": "tx", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4027, "src": "5321:2:0", "typeDescriptions": { "typeIdentifier": "t_magic_transaction", "typeString": "tx" } }, "id": 232, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "origin", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "5321:9:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", "src": "5271:76:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 240, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 236, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 206, "src": "5361:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", "id": 238, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "5381:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" } ], "id": 237, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "5373:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 239, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5373:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "5361:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "id": 259, "nodeType": "Block", "src": "5545:113:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 252, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 206, "src": "5581:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 253, "name": "receiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 225, "src": "5591:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 254, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 212, "src": "5601:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 251, "name": "transferToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1717, "src": "5567:13:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) returns (bool)" } }, "id": 255, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5567:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "436f756c64206e6f74207061792067617320636f737473207769746820746f6b656e", "id": 256, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5610:36:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_8560a13547eca5648355c8db1a9f8653b6f657d31d476c36bca25e47b45b08f4", "typeString": "literal_string \"Could not pay gas costs with token\"" }, "value": "Could not pay gas costs with token" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_8560a13547eca5648355c8db1a9f8653b6f657d31d476c36bca25e47b45b08f4", "typeString": "literal_string \"Could not pay gas costs with token\"" } ], "id": 250, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "5559:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 257, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5559:88:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 258, "nodeType": "ExpressionStatement", "src": "5559:88:0" } ] }, "id": 260, "nodeType": "IfStatement", "src": "5357:301:0", "trueBody": { "id": 249, "nodeType": "Block", "src": "5385:154:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 244, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 212, "src": "5482:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 242, "name": "receiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 225, "src": "5468:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 243, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "send", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "5468:13:0", "typeDescriptions": { "typeIdentifier": "t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) returns (bool)" } }, "id": 245, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5468:21:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "436f756c64206e6f74207061792067617320636f7374732077697468206574686572", "id": 246, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "5491:36:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_e2a11e15f7be1214c1340779ad55027af8aa33aee6cb521776a28a0a44aea377", "typeString": "literal_string \"Could not pay gas costs with ether\"" }, "value": "Could not pay gas costs with ether" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_e2a11e15f7be1214c1340779ad55027af8aa33aee6cb521776a28a0a44aea377", "typeString": "literal_string \"Could not pay gas costs with ether\"" } ], "id": 241, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "5460:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 247, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "5460:68:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 248, "nodeType": "ExpressionStatement", "src": "5460:68:0" } ] } } ] }, "documentation": null, "id": 262, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "handlePayment", "nodeType": "FunctionDefinition", "parameters": { "id": 209, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 200, "name": "gasUsed", "nodeType": "VariableDeclaration", "scope": 262, "src": "4981:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 199, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "4981:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 202, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 262, "src": "5006:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 201, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5006:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 204, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 262, "src": "5031:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 203, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "5031:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 206, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 262, "src": "5057:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 205, "name": "address", "nodeType": "ElementaryTypeName", "src": "5057:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 208, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 262, "src": "5083:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 207, "name": "address", "nodeType": "ElementaryTypeName", "src": "5083:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "src": "4971:140:0" }, "payable": false, "returnParameters": { "id": 210, "nodeType": "ParameterList", "parameters": [], "src": "5132:0:0" }, "scope": 692, "src": "4949:715:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "private" }, { "body": { "id": 427, "nodeType": "Block", "src": "6415:2326:0", "statements": [ { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 280, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 275, "name": "signatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 268, "src": "6496:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "id": 276, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "6496:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 279, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 277, "name": "threshold", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1242, "src": "6516:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "*", "rightExpression": { "argumentTypes": null, "hexValue": "3635", "id": 278, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6528:2:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_65_by_1", "typeString": "int_const 65" }, "value": "65" }, "src": "6516:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "6496:34:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 284, "nodeType": "IfStatement", "src": "6492:77:0", "trueBody": { "id": 283, "nodeType": "Block", "src": "6532:37:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 281, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "6553:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 282, "nodeType": "Return", "src": "6546:12:0" } ] } }, { "assignments": [ 286 ], "declarations": [ { "constant": false, "id": 286, "name": "lastOwner", "nodeType": "VariableDeclaration", "scope": 428, "src": "6630:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 285, "name": "address", "nodeType": "ElementaryTypeName", "src": "6630:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 290, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30", "id": 288, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6658:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" } ], "id": 287, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "6650:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 289, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6650:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", "src": "6630:30:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 292, "name": "currentOwner", "nodeType": "VariableDeclaration", "scope": 428, "src": "6670:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 291, "name": "address", "nodeType": "ElementaryTypeName", "src": "6670:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" } ], "id": 293, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6670:20:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 295, "name": "v", "nodeType": "VariableDeclaration", "scope": 428, "src": "6700:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 294, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "6700:5:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": null, "visibility": "internal" } ], "id": 296, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6700:7:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 298, "name": "r", "nodeType": "VariableDeclaration", "scope": 428, "src": "6717:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 297, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "6717:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 299, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6717:9:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 301, "name": "s", "nodeType": "VariableDeclaration", "scope": 428, "src": "6736:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 300, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "6736:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 302, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6736:9:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 304, "name": "i", "nodeType": "VariableDeclaration", "scope": 428, "src": "6755:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 303, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "6755:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 305, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "6755:9:0" }, { "body": { "id": 423, "nodeType": "Block", "src": "6806:1908:0", "statements": [ { "expression": { "argumentTypes": null, "id": 324, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "components": [ { "argumentTypes": null, "id": 316, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "6821:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 317, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "6824:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 318, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 301, "src": "6827:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "id": 319, "isConstant": false, "isInlineArray": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "TupleExpression", "src": "6820:9:0", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 321, "name": "signatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 268, "src": "6847:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 322, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6859:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 320, "name": "signatureSplit", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1790, "src": "6832:14:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "function (bytes memory,uint256) pure returns (uint8,bytes32,bytes32)" } }, "id": 323, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "6832:29:0", "typeDescriptions": { "typeIdentifier": "t_tuple$_t_uint8_$_t_bytes32_$_t_bytes32_$", "typeString": "tuple(uint8,bytes32,bytes32)" } }, "src": "6820:41:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 325, "nodeType": "ExpressionStatement", "src": "6820:41:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "id": 328, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 326, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "6936:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 327, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6941:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "6936:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "id": 354, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 352, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "7691:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "31", "id": 353, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "7696:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "7691:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "id": 403, "nodeType": "Block", "src": "8399:149:0", "statements": [ { "expression": { "argumentTypes": null, "id": 401, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 394, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8490:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 396, "name": "dataHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 264, "src": "8515:8:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 397, "name": "v", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 295, "src": "8525:1:0", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, { "argumentTypes": null, "id": 398, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "8528:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 399, "name": "s", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 301, "src": "8531:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_uint8", "typeString": "uint8" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 395, "name": "ecrecover", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4007, "src": "8505:9:0", "typeDescriptions": { "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" } }, "id": 400, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "8505:28:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8490:43:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 402, "nodeType": "ExpressionStatement", "src": "8490:43:0" } ] }, "id": 404, "nodeType": "IfStatement", "src": "7687:861:0", "trueBody": { "id": 393, "nodeType": "Block", "src": "7699:694:0", "statements": [ { "expression": { "argumentTypes": null, "id": 359, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 355, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "7812:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 357, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "7835:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 356, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7827:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 358, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7827:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "7812:25:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 360, "nodeType": "ExpressionStatement", "src": "7812:25:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 372, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 364, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 361, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "8004:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 362, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "8004:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "id": 363, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8018:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8004:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 371, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 365, "name": "approvedHashes", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 49, "src": "8034:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" } }, "id": 367, "indexExpression": { "argumentTypes": null, "id": 366, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8049:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8034:28:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 369, "indexExpression": { "argumentTypes": null, "id": 368, "name": "dataHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 264, "src": "8063:8:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8034:38:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 370, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8076:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "8034:43:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "8004:73:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 376, "nodeType": "IfStatement", "src": "8000:132:0", "trueBody": { "id": 375, "nodeType": "Block", "src": "8079:53:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 373, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "8108:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 374, "nodeType": "Return", "src": "8101:12:0" } ] } }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 382, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 377, "name": "consumeHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 270, "src": "8253:11:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "&&", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 381, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 378, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "8268:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 379, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "8268:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "id": 380, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8282:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8268:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "8253:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 392, "nodeType": "IfStatement", "src": "8249:130:0", "trueBody": { "id": 391, "nodeType": "Block", "src": "8296:83:0", "statements": [ { "expression": { "argumentTypes": null, "id": 389, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 383, "name": "approvedHashes", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 49, "src": "8318:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" } }, "id": 386, "indexExpression": { "argumentTypes": null, "id": 384, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8333:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8318:28:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 387, "indexExpression": { "argumentTypes": null, "id": 385, "name": "dataHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 264, "src": "8347:8:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "8318:38:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "30", "id": 388, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8359:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "8318:42:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 390, "nodeType": "ExpressionStatement", "src": "8318:42:0" } ] } } ] } }, "id": 405, "nodeType": "IfStatement", "src": "6932:1616:0", "trueBody": { "id": 351, "nodeType": "Block", "src": "6944:737:0", "statements": [ { "expression": { "argumentTypes": null, "id": 333, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 329, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "7061:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 331, "name": "r", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 298, "src": "7084:1:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "id": 330, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "7076:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, "id": 332, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7076:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "7061:25:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 334, "nodeType": "ExpressionStatement", "src": "7061:25:0" }, { "assignments": [], "declarations": [ { "constant": false, "id": 336, "name": "contractSignature", "nodeType": "VariableDeclaration", "scope": 428, "src": "7104:30:0", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 335, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "7104:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "id": 337, "initialValue": null, "nodeType": "VariableDeclarationStatement", "src": "7104:30:0" }, { "externalReferences": [ { "contractSignature": { "declaration": 336, "isOffset": false, "isSlot": false, "src": "7394:17:0", "valueSize": 1 } }, { "signatures": { "declaration": 268, "isOffset": false, "isSlot": false, "src": "7423:10:0", "valueSize": 1 } }, { "s": { "declaration": 301, "isOffset": false, "isSlot": false, "src": "7435:1:0", "valueSize": 1 } } ], "id": 338, "nodeType": "InlineAssembly", "operations": "{\n contractSignature := add(add(signatures, s), 0x20)\n}", "src": "7224:257:0" }, { "condition": { "argumentTypes": null, "id": 346, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "!", "prefix": true, "src": "7483:76:0", "subExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 343, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 266, "src": "7535:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 344, "name": "contractSignature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 336, "src": "7541:17:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 340, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "7504:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" } ], "id": 339, "name": "ISignatureValidator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1803, "src": "7484:19:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_ISignatureValidator_$1803_$", "typeString": "type(contract ISignatureValidator)" } }, "id": 341, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7484:33:0", "typeDescriptions": { "typeIdentifier": "t_contract$_ISignatureValidator_$1803", "typeString": "contract ISignatureValidator" } }, "id": 342, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "isValidSignature", "nodeType": "MemberAccess", "referencedDeclaration": 1802, "src": "7484:50:0", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$", "typeString": "function (bytes memory,bytes memory) external returns (bool)" } }, "id": 345, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "7484:75:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 350, "nodeType": "IfStatement", "src": "7479:135:0", "trueBody": { "id": 349, "nodeType": "Block", "src": "7561:53:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 347, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "7590:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 348, "nodeType": "Return", "src": "7583:12:0" } ] } } ] } }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_bool", "typeString": "bool" }, "id": 414, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 408, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 406, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8565:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "<=", "rightExpression": { "argumentTypes": null, "id": 407, "name": "lastOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 286, "src": "8581:9:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8565:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "BinaryOperation", "operator": "||", "rightExpression": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 413, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 409, "name": "owners", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1238, "src": "8594:6:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_address_$", "typeString": "mapping(address => address)" } }, "id": 411, "indexExpression": { "argumentTypes": null, "id": 410, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8601:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "8594:20:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 412, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "8618:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "8594:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "8565:54:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, "id": 418, "nodeType": "IfStatement", "src": "8561:105:0", "trueBody": { "id": 417, "nodeType": "Block", "src": "8621:45:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", "id": 415, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "8646:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, "functionReturnParameters": 274, "id": 416, "nodeType": "Return", "src": "8639:12:0" } ] } }, { "expression": { "argumentTypes": null, "id": 421, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 419, "name": "lastOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 286, "src": "8679:9:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "id": 420, "name": "currentOwner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 292, "src": "8691:12:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "src": "8679:24:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "id": 422, "nodeType": "ExpressionStatement", "src": "8679:24:0" } ] }, "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 312, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 310, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6786:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "<", "rightExpression": { "argumentTypes": null, "id": 311, "name": "threshold", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1242, "src": "6790:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "6786:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 424, "initializationExpression": { "expression": { "argumentTypes": null, "id": 308, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 306, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6779:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "30", "id": 307, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "6783:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "6779:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 309, "nodeType": "ExpressionStatement", "src": "6779:5:0" }, "loopExpression": { "expression": { "argumentTypes": null, "id": 314, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "UnaryOperation", "operator": "++", "prefix": false, "src": "6801:3:0", "subExpression": { "argumentTypes": null, "id": 313, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 304, "src": "6801:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 315, "nodeType": "ExpressionStatement", "src": "6801:3:0" }, "nodeType": "ForStatement", "src": "6774:1940:0" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", "id": 425, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "8730:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, "functionReturnParameters": 274, "id": 426, "nodeType": "Return", "src": "8723:11:0" } ] }, "documentation": "@dev Should return whether the signature provided is valid for the provided data, hash\n@param dataHash Hash of the data (could be either a message hash or transaction hash)\n@param data That should be signed (this is passed to an external validator contract)\n@param signatures Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash.\n@param consumeHash Indicates that in case of an approved hash the storage can be freed to save gas\n@return a bool upon valid or invalid signature with corresponding _data", "id": 428, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "checkSignatures", "nodeType": "FunctionDefinition", "parameters": { "id": 271, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 264, "name": "dataHash", "nodeType": "VariableDeclaration", "scope": 428, "src": "6305:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 263, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "6305:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 266, "name": "data", "nodeType": "VariableDeclaration", "scope": 428, "src": "6323:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 265, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "6323:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 268, "name": "signatures", "nodeType": "VariableDeclaration", "scope": 428, "src": "6335:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 267, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "6335:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 270, "name": "consumeHash", "nodeType": "VariableDeclaration", "scope": 428, "src": "6353:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 269, "name": "bool", "nodeType": "ElementaryTypeName", "src": "6353:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "6304:66:0" }, "payable": false, "returnParameters": { "id": 274, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 273, "name": "", "nodeType": "VariableDeclaration", "scope": 428, "src": "6405:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 272, "name": "bool", "nodeType": "ElementaryTypeName", "src": "6405:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "6404:6:0" }, "scope": 692, "src": "6280:2461:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "internal" }, { "body": { "id": 475, "nodeType": "Block", "src": "9804:420:0", "statements": [ { "assignments": [ 444 ], "declarations": [ { "constant": false, "id": 444, "name": "startGas", "nodeType": "VariableDeclaration", "scope": 476, "src": "9814:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 443, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9814:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 447, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 445, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "9833:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 446, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9833:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "9814:28:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 450, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 430, "src": "10004:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 451, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 432, "src": "10008:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 452, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 434, "src": "10015:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 453, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 436, "src": "10021:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 454, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "10032:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 455, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10032:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 449, "name": "execute", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 854, "src": "9996:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256) returns (bool)" } }, "id": 456, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9996:46:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 448, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4018, "src": "9988:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, "id": 457, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "9988:55:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 458, "nodeType": "ExpressionStatement", "src": "9988:55:0" }, { "assignments": [ 460 ], "declarations": [ { "constant": false, "id": 460, "name": "requiredGas", "nodeType": "VariableDeclaration", "scope": 476, "src": "10053:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 459, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "10053:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "id": 465, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 464, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "id": 461, "name": "startGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 444, "src": "10075:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "-", "rightExpression": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], "id": 462, "name": "gasleft", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4008, "src": "10086:7:0", "typeDescriptions": { "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$", "typeString": "function () view returns (uint256)" } }, "id": 463, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10086:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "src": "10075:20:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", "src": "10053:42:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 470, "name": "requiredGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 460, "src": "10203:11:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 468, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "10186:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 469, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "10186:16:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 471, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10186:29:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 467, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "10179:6:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_string_storage_ptr_$", "typeString": "type(string storage pointer)" }, "typeName": "string" }, "id": 472, "isConstant": false, "isLValue": false, "isPure": false, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10179:37:0", "typeDescriptions": { "typeIdentifier": "t_string_memory", "typeString": "string memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_string_memory", "typeString": "string memory" } ], "id": 466, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ 4020, 4021 ], "referencedDeclaration": 4021, "src": "10172:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, "id": 473, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10172:45:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 474, "nodeType": "ExpressionStatement", "src": "10172:45:0" } ] }, "documentation": "@dev Allows to estimate a Safe transaction.\n This method is only meant for estimation purpose, therfore two different protection mechanism against execution in a transaction have been made:\n 1.) The method can only be called from the safe itself\n 2.) The response is returned with a revert\n When estimating set `from` to the address of the safe.\n Since the `estimateGas` function includes refunds, call this method to get an estimated of the costs that are deducted from the safe with `execTransaction`\n @param to Destination address of Safe transaction.\n @param value Ether value of Safe transaction.\n @param data Data payload of Safe transaction.\n @param operation Operation type of Safe transaction.\n @return Estimate without refunds and overhead fees (base transaction and payload data gas costs).", "id": 476, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, "id": 439, "modifierName": { "argumentTypes": null, "id": 438, "name": "authorized", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1734, "src": "9763:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", "src": "9763:10:0" } ], "name": "requiredTxGas", "nodeType": "FunctionDefinition", "parameters": { "id": 437, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 430, "name": "to", "nodeType": "VariableDeclaration", "scope": 476, "src": "9675:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 429, "name": "address", "nodeType": "ElementaryTypeName", "src": "9675:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 432, "name": "value", "nodeType": "VariableDeclaration", "scope": 476, "src": "9687:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 431, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9687:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 434, "name": "data", "nodeType": "VariableDeclaration", "scope": 476, "src": "9702:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 433, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "9702:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 436, "name": "operation", "nodeType": "VariableDeclaration", "scope": 476, "src": "9714:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 435, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "9714:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" } ], "src": "9674:65:0" }, "payable": false, "returnParameters": { "id": 442, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 441, "name": "", "nodeType": "VariableDeclaration", "scope": 476, "src": "9791:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 440, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "9791:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "9790:9:0" }, "scope": 692, "src": "9652:572:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 500, "nodeType": "Block", "src": "10531:138:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "commonType": { "typeIdentifier": "t_address", "typeString": "address" }, "id": 487, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 482, "name": "owners", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1238, "src": "10549:6:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_address_$", "typeString": "mapping(address => address)" } }, "id": 485, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 483, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "10556:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 484, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "10556:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "10549:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 486, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10571:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "10549:23:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, { "argumentTypes": null, "hexValue": "4f6e6c79206f776e6572732063616e20617070726f766520612068617368", "id": 488, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", "src": "10574:32:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_60f21058f4a7689ef29853b3c9c17c9bf69856a949794649bb68878f00552475", "typeString": "literal_string \"Only owners can approve a hash\"" }, "value": "Only owners can approve a hash" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bool", "typeString": "bool" }, { "typeIdentifier": "t_stringliteral_60f21058f4a7689ef29853b3c9c17c9bf69856a949794649bb68878f00552475", "typeString": "literal_string \"Only owners can approve a hash\"" } ], "id": 481, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ 4018, 4019 ], "referencedDeclaration": 4019, "src": "10541:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, "id": 489, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10541:66:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, "id": 490, "nodeType": "ExpressionStatement", "src": "10541:66:0" }, { "expression": { "argumentTypes": null, "id": 498, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 491, "name": "approvedHashes", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 49, "src": "10617:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_uint256_$_$", "typeString": "mapping(address => mapping(bytes32 => uint256))" } }, "id": 495, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 492, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4015, "src": "10632:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, "id": 493, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "10632:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "10617:26:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 496, "indexExpression": { "argumentTypes": null, "id": 494, "name": "hashToApprove", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 478, "src": "10644:13:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "10617:41:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "31", "id": 497, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10661:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "10617:45:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 499, "nodeType": "ExpressionStatement", "src": "10617:45:0" } ] }, "documentation": "@dev Marks a hash as approved. This can be used to validate a hash that is used by a signature.\n@param hashToApprove The hash that should be marked as approved for signatures that are verified by this contract.", "id": 501, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "approveHash", "nodeType": "FunctionDefinition", "parameters": { "id": 479, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 478, "name": "hashToApprove", "nodeType": "VariableDeclaration", "scope": 501, "src": "10489:21:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 477, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "10489:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "10488:23:0" }, "payable": false, "returnParameters": { "id": 480, "nodeType": "ParameterList", "parameters": [], "src": "10531:0:0" }, "scope": 692, "src": "10468:201:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 516, "nodeType": "Block", "src": "10903:58:0", "statements": [ { "expression": { "argumentTypes": null, "id": 514, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 508, "name": "signedMessages", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 43, "src": "10913:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 512, "indexExpression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 510, "name": "_data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 503, "src": "10943:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 509, "name": "getMessageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 591, "src": "10928:14:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) view returns (bytes32)" } }, "id": 511, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "10928:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", "src": "10913:37:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "hexValue": "31", "id": 513, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "10953:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" }, "src": "10913:41:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "id": 515, "nodeType": "ExpressionStatement", "src": "10913:41:0" } ] }, "documentation": "@dev Marks a message as signed\n@param _data Arbitrary length data that should be marked as signed on the behalf of address(this)", "id": 517, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, "id": 506, "modifierName": { "argumentTypes": null, "id": 505, "name": "authorized", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1734, "src": "10888:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", "src": "10888:10:0" } ], "name": "signMessage", "nodeType": "FunctionDefinition", "parameters": { "id": 504, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 503, "name": "_data", "nodeType": "VariableDeclaration", "scope": 517, "src": "10852:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 502, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "10852:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "10851:13:0" }, "payable": false, "returnParameters": { "id": 507, "nodeType": "ParameterList", "parameters": [], "src": "10903:0:0" }, "scope": 692, "src": "10831:130:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { "id": 556, "nodeType": "Block", "src": "11400:340:0", "statements": [ { "assignments": [ 527 ], "declarations": [ { "constant": false, "id": 527, "name": "messageHash", "nodeType": "VariableDeclaration", "scope": 557, "src": "11410:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 526, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "11410:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 531, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 529, "name": "_data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 519, "src": "11447:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 528, "name": "getMessageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 591, "src": "11432:14:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) view returns (bytes32)" } }, "id": 530, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11432:21:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "11410:43:0" }, { "condition": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 535, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "id": 532, "name": "_signature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 521, "src": "11467:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "id": 533, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "11467:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "==", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 534, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11488:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "11467:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { "id": 554, "nodeType": "Block", "src": "11564:170:0", "statements": [ { "expression": { "argumentTypes": null, "id": 552, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 545, "name": "isValid", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 524, "src": "11659:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 547, "name": "messageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 527, "src": "11685:11:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 548, "name": "_data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 519, "src": "11698:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 549, "name": "_signature", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 521, "src": "11705:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "hexValue": "66616c7365", "id": 550, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", "src": "11717:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_bool", "typeString": "bool" } ], "id": 546, "name": "checkSignatures", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 428, "src": "11669:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_bool_$", "typeString": "function (bytes32,bytes memory,bytes memory,bool) returns (bool)" } }, "id": 551, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "11669:54:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "11659:64:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 553, "nodeType": "ExpressionStatement", "src": "11659:64:0" } ] }, "id": 555, "nodeType": "IfStatement", "src": "11463:271:0", "trueBody": { "id": 544, "nodeType": "Block", "src": "11491:67:0", "statements": [ { "expression": { "argumentTypes": null, "id": 542, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, "id": 536, "name": "isValid", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 524, "src": "11505:7:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "Assignment", "operator": "=", "rightHandSide": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "id": 541, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, "id": 537, "name": "signedMessages", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 43, "src": "11515:14:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, "id": 539, "indexExpression": { "argumentTypes": null, "id": 538, "name": "messageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 527, "src": "11530:11:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "isConstant": false, "isLValue": true, "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", "src": "11515:27:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "BinaryOperation", "operator": "!=", "rightExpression": { "argumentTypes": null, "hexValue": "30", "id": 540, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "11546:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, "src": "11515:32:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "src": "11505:42:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "id": 543, "nodeType": "ExpressionStatement", "src": "11505:42:0" } ] } } ] }, "documentation": "@dev Should return whether the signature provided is valid for the provided data\n@param _data Arbitrary length data signed on the behalf of address(this)\n@param _signature Signature byte array associated with _data\n@return a bool upon valid or invalid signature with corresponding _data", "id": 557, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [], "name": "isValidSignature", "nodeType": "FunctionDefinition", "parameters": { "id": 522, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 519, "name": "_data", "nodeType": "VariableDeclaration", "scope": 557, "src": "11319:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 518, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "11319:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 521, "name": "_signature", "nodeType": "VariableDeclaration", "scope": 557, "src": "11332:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 520, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "11332:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "11318:31:0" }, "payable": false, "returnParameters": { "id": 525, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 524, "name": "isValid", "nodeType": "VariableDeclaration", "scope": 557, "src": "11382:12:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "typeName": { "id": 523, "name": "bool", "nodeType": "ElementaryTypeName", "src": "11382:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "value": null, "visibility": "internal" } ], "src": "11381:14:0" }, "scope": 692, "src": "11293:447:0", "stateMutability": "nonpayable", "superFunction": 1802, "visibility": "public" }, { "body": { "id": 590, "nodeType": "Block", "src": "12009:246:0", "statements": [ { "assignments": [ 565 ], "declarations": [ { "constant": false, "id": 565, "name": "safeMessageHash", "nodeType": "VariableDeclaration", "scope": 591, "src": "12019:23:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 564, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "12019:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 575, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 569, "name": "SAFE_MSG_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 31, "src": "12079:17:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 571, "name": "message", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 559, "src": "12108:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 570, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "12098:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 572, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12098:18:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 567, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "12068:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 568, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "12068:10:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 573, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12068:49:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 566, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "12045:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 574, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12045:82:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "12019:108:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30783139", "id": 580, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "12189:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" }, "value": "0x19" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" } ], "id": 579, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "12184:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 581, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12184:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", "id": 583, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "12201:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" } ], "id": 582, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "12196:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 584, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12196:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "id": 585, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "12205:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 586, "name": "safeMessageHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 565, "src": "12222:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 577, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "12167:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 578, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "12167:16:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 587, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12167:71:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 576, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "12144:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 588, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "12144:104:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 563, "id": 589, "nodeType": "Return", "src": "12137:111:0" } ] }, "documentation": "@dev Returns hash of a message that can be signed by owners.\n @param message Message that should be hashed\n @return Message hash.", "id": 591, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "getMessageHash", "nodeType": "FunctionDefinition", "parameters": { "id": 560, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 559, "name": "message", "nodeType": "VariableDeclaration", "scope": 591, "src": "11931:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 558, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "11931:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "11921:29:0" }, "payable": false, "returnParameters": { "id": 563, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 562, "name": "", "nodeType": "VariableDeclaration", "scope": 591, "src": "11996:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 561, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "11996:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "11995:9:0" }, "scope": 692, "src": "11898:357:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 649, "nodeType": "Block", "src": "13318:285:0", "statements": [ { "assignments": [ 617 ], "declarations": [ { "constant": false, "id": 617, "name": "safeTxHash", "nodeType": "VariableDeclaration", "scope": 650, "src": "13328:18:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 616, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "13328:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "id": 636, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 621, "name": "SAFE_TX_TYPEHASH", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 28, "src": "13383:16:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 622, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 593, "src": "13401:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 623, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 595, "src": "13405:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 625, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 597, "src": "13422:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 624, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "13412:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 626, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13412:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 627, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 599, "src": "13429:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "id": 628, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 601, "src": "13440:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 629, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 603, "src": "13451:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 630, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 605, "src": "13460:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 631, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 607, "src": "13470:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 632, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 609, "src": "13480:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 633, "name": "_nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 611, "src": "13496:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "expression": { "argumentTypes": null, "id": 619, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "13372:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 620, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encode", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "13372:10:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 634, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13372:131:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 618, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "13349:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 635, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13349:164:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", "src": "13328:185:0" }, { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "30783139", "id": 640, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "13552:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" }, "value": "0x19" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_25_by_1", "typeString": "int_const 25" } ], "id": 639, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "13547:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 641, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13547:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "hexValue": "31", "id": 643, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "13564:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" }, "value": "1" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_1_by_1", "typeString": "int_const 1" } ], "id": 642, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "13559:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, "id": 644, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13559:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" } }, { "argumentTypes": null, "id": 645, "name": "domainSeparator", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 39, "src": "13568:15:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, { "argumentTypes": null, "id": 646, "name": "safeTxHash", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 617, "src": "13585:10:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes1", "typeString": "bytes1" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } ], "expression": { "argumentTypes": null, "id": 637, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4002, "src": "13530:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, "id": 638, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, "src": "13530:16:0", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, "id": 647, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "13530:66:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, "functionReturnParameters": 615, "id": 648, "nodeType": "Return", "src": "13523:73:0" } ] }, "documentation": "@dev Returns the bytes that are hashed to be signed by owners.\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @param safeTxGas Fas that should be used for the safe transaction.\n @param dataGas Gas costs for data used to trigger the safe transaction.\n @param gasPrice Maximum gas price that should be used for this transaction.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param _nonce Transaction nonce.\n @return Transaction hash bytes.", "id": 650, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "encodeTransactionData", "nodeType": "FunctionDefinition", "parameters": { "id": 612, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 593, "name": "to", "nodeType": "VariableDeclaration", "scope": 650, "src": "13008:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 592, "name": "address", "nodeType": "ElementaryTypeName", "src": "13008:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 595, "name": "value", "nodeType": "VariableDeclaration", "scope": 650, "src": "13028:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 594, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13028:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 597, "name": "data", "nodeType": "VariableDeclaration", "scope": 650, "src": "13051:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 596, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "13051:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 599, "name": "operation", "nodeType": "VariableDeclaration", "scope": 650, "src": "13071:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 598, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "13071:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 601, "name": "safeTxGas", "nodeType": "VariableDeclaration", "scope": 650, "src": "13105:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 600, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13105:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 603, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 650, "src": "13132:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 602, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13132:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 605, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 650, "src": "13157:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 604, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13157:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 607, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 650, "src": "13183:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 606, "name": "address", "nodeType": "ElementaryTypeName", "src": "13183:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 609, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 650, "src": "13209:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 608, "name": "address", "nodeType": "ElementaryTypeName", "src": "13209:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 611, "name": "_nonce", "nodeType": "VariableDeclaration", "scope": 650, "src": "13241:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 610, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "13241:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "12998:263:0" }, "payable": false, "returnParameters": { "id": 615, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 614, "name": "", "nodeType": "VariableDeclaration", "scope": 650, "src": "13307:5:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 613, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "13307:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" } ], "src": "13306:7:0" }, "scope": 692, "src": "12968:635:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { "id": 690, "nodeType": "Block", "src": "14638:148:0", "statements": [ { "expression": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "arguments": [ { "argumentTypes": null, "id": 677, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 652, "src": "14687:2:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 678, "name": "value", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 654, "src": "14691:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 679, "name": "data", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 656, "src": "14698:4:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } }, { "argumentTypes": null, "id": 680, "name": "operation", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 658, "src": "14704:9:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, { "argumentTypes": null, "id": 681, "name": "safeTxGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 660, "src": "14715:9:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 682, "name": "dataGas", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 662, "src": "14726:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 683, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 664, "src": "14735:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, { "argumentTypes": null, "id": 684, "name": "gasToken", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 666, "src": "14745:8:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 685, "name": "refundReceiver", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 668, "src": "14755:14:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, { "argumentTypes": null, "id": 686, "name": "_nonce", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 670, "src": "14771:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" }, { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_address", "typeString": "address" }, { "typeIdentifier": "t_uint256", "typeString": "uint256" } ], "id": 676, "name": "encodeTransactionData", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 650, "src": "14665:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_enum$_Operation_$1658_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$_t_bytes_memory_ptr_$", "typeString": "function (address,uint256,bytes memory,enum Enum.Operation,uint256,uint256,uint256,address,address,uint256) view returns (bytes memory)" } }, "id": 687, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "14665:113:0", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" } ], "id": 675, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4009, "src": "14655:9:0", "typeDescriptions": { "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$", "typeString": "function () pure returns (bytes32)" } }, "id": 688, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "names": [], "nodeType": "FunctionCall", "src": "14655:124:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "functionReturnParameters": 674, "id": 689, "nodeType": "Return", "src": "14648:131:0" } ] }, "documentation": "@dev Returns hash to be signed by owners.\n @param to Destination address.\n @param value Ether value.\n @param data Data payload.\n @param operation Operation type.\n @param safeTxGas Fas that should be used for the safe transaction.\n @param dataGas Gas costs for data used to trigger the safe transaction.\n @param gasPrice Maximum gas price that should be used for this transaction.\n @param gasToken Token address (or 0 if ETH) that is used for the payment.\n @param refundReceiver Address of receiver of gas payment (or 0 if tx.origin).\n @param _nonce Transaction nonce.\n @return Transaction hash.", "id": 691, "implemented": true, "isConstructor": false, "isDeclaredConst": true, "modifiers": [], "name": "getTransactionHash", "nodeType": "FunctionDefinition", "parameters": { "id": 671, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 652, "name": "to", "nodeType": "VariableDeclaration", "scope": 691, "src": "14326:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 651, "name": "address", "nodeType": "ElementaryTypeName", "src": "14326:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 654, "name": "value", "nodeType": "VariableDeclaration", "scope": 691, "src": "14346:13:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 653, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14346:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 656, "name": "data", "nodeType": "VariableDeclaration", "scope": 691, "src": "14369:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes" }, "typeName": { "id": 655, "name": "bytes", "nodeType": "ElementaryTypeName", "src": "14369:5:0", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 658, "name": "operation", "nodeType": "VariableDeclaration", "scope": 691, "src": "14389:24:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" }, "typeName": { "contractScope": null, "id": 657, "name": "Enum.Operation", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 1658, "src": "14389:14:0", "typeDescriptions": { "typeIdentifier": "t_enum$_Operation_$1658", "typeString": "enum Enum.Operation" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 660, "name": "safeTxGas", "nodeType": "VariableDeclaration", "scope": 691, "src": "14423:17:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 659, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14423:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 662, "name": "dataGas", "nodeType": "VariableDeclaration", "scope": 691, "src": "14450:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 661, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14450:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 664, "name": "gasPrice", "nodeType": "VariableDeclaration", "scope": 691, "src": "14475:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 663, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14475:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 666, "name": "gasToken", "nodeType": "VariableDeclaration", "scope": 691, "src": "14501:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 665, "name": "address", "nodeType": "ElementaryTypeName", "src": "14501:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 668, "name": "refundReceiver", "nodeType": "VariableDeclaration", "scope": 691, "src": "14527:22:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 667, "name": "address", "nodeType": "ElementaryTypeName", "src": "14527:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 670, "name": "_nonce", "nodeType": "VariableDeclaration", "scope": 691, "src": "14559:14:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 669, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "14559:7:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "14316:263:0" }, "payable": false, "returnParameters": { "id": 674, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 673, "name": "", "nodeType": "VariableDeclaration", "scope": 691, "src": "14625:7:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" }, "typeName": { "id": 672, "name": "bytes32", "nodeType": "ElementaryTypeName", "src": "14625:7:0", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "value": null, "visibility": "internal" } ], "src": "14624:9:0" }, "scope": 692, "src": "14289:497:0", "stateMutability": "view", "superFunction": null, "visibility": "public" } ], "scope": 693, "src": "534:14254:0" } ], "src": "0:14789:0" }, "compiler": { "name": "solc", "version": "0.4.24+commit.e67f0147.Emscripten.clang" }, "networks": { "4": { "events": {}, "links": {}, "address": "0x1d0fbe91e6f0c8506b70a9659b3b9f962d25bfa1", "transactionHash": "0xa1b4d6790c09394af1233b0ae788b1d92f58be265e6baa815930e502393f0eaa" }, "1538739975997": { "events": {}, "links": {}, "address": "0x254dffcd3277c0b1660f6d42efbb754edababc2b", "transactionHash": "0x515bd2920d6d65a280f2456bc1a7e2f38eeccd5995708dfb55bb1871875ae37d" } }, "schemaVersion": "2.0.0", "updatedAt": "2018-10-05T14:43:41.464Z" }