{
    "contractName": "TestOnchainInvokable",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "dataHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "currentTokenAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "currentTokenAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "currentRepaymentAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "isCurrentTokenEther",
                    "type": "bool"
                }
            ],
            "name": "HelperDump",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "stateMutability": "payable",
            "type": "fallback"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "execute",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdraw",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"currentTokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentRepaymentAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isCurrentTokenEther\",\"type\":\"bool\"}],\"name\":\"HelperDump\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestOnchainInvokable.sol\":\"TestOnchainInvokable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol\":{\"keccak256\":\"0x36fb31db8a8e7eed7038b37554582655826969a556005d8ee3ab5070fe034860\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e0dde70be03ea1e086a5bce0d3a7bb1ac65549eab7ea2618343255332edddca7\",\"dweb:/ipfs/QmVaQG686g3tbgM3L3mtw4ei1WxzcDRcS9UxipSt4KCYs1\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol\":{\"keccak256\":\"0x372bca80a3e9d20439e9bf88cc026d6d1ec01556463e902511c67b6fc92e12d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a5e6b5ef4246d03871bbd44b34e1212a9567d963f1b1e8e58e6273709442d4fb\",\"dweb:/ipfs/Qmb5Es45FLS4hhNGb9md3KU7L7hyMW7HHzumrVfsZZgxgC\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/KollateralInvokable.sol\":{\"keccak256\":\"0x4b02498b78045bba86ea077b47f9fc10714e0a8f17a9bca0498dac1b7b7dadac\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://beb241b55d91c474fb08119c4f4ddf92fa2fffb2a3f811d76511341880b70e8c\",\"dweb:/ipfs/QmdxtYC83A8Axn2XuJZcmE3RzEFxKXu7SSbvVoqCMydgYA\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/BalanceCarrier.sol\":{\"keccak256\":\"0x69e63e482d839c831c8c32f002e6454f6a8d9e602b39e9cdc1c0649451df3337\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0a40661372b8f95cbed7714a16323b435ccbe85205178d32bc6012e47bfc0640\",\"dweb:/ipfs/QmTyHr1Ag4AkcyazzTT5GDcWabAMHPTrELoGhL85ZWDgBy\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/common/utils/ExternalCaller.sol\":{\"keccak256\":\"0x54f88a1f0ac5dd7ab99a0519124cb09f1e19b4efb9baf240bc2500f8caa0b4ff\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3170671378d20b47498224d065e33fccc223ae772d7f0af2c5ef314f94b75c98\",\"dweb:/ipfs/Qme8ZEEBnBG5Vvj8uyJCD2YVPcLx6funKsSSCpGkTyn1zi\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestOnchainInvokable.sol\":{\"keccak256\":\"0xc81999c318986d9f07b5659a7c9606e4776fd462143d0b4e336caf12b540b6c8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://76ade0318788642e4b60fc8b8430d66836dc0988151726d5c5c0df8b185ea5b0\",\"dweb:/ipfs/QmVrdzXFovkBfTrX9yYs1U6DN5wW1ySNSm7z3WzSvJJjZR\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248246ac66e6479dce1ad7d4945ec5540c98ceb09881e93c93f7c48d5772925c\",\"dweb:/ipfs/QmXr8tmUiZgEYid6ixeeBRmTdUnASWjKzhP3KRxMPy8fRt\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x46d2453e9db55eae25c9abdae2c42229086c54f1a6a247e8ce32658bb785f6ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://198ef77ef5d9f7a7709d6bbfba1d4d54d82ccc15358e9dced37f1376dac887fa\",\"dweb:/ipfs/QmQHFvCA74s3AHU3NMn4AAYzFTt6UotWq7yk3WzLQs1oJS\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}",
    "bytecode": "0x6080604052606460015534801561001557600080fd5b506001806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600061006961010d60201b60201c565b905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350610115565b600033905090565b6111c1806101246000396000f3fe60806040526004361061004e5760003560e01c806309c5eabe14610057578063715018a6146100d05780638da5cb5b146100e7578063f2fde38b14610128578063f3fef3a31461017957610055565b3661005557005b005b6100ce6004803603602081101561006d57600080fd5b810190808035906020019064010000000081111561008a57600080fd5b82018360208201111561009c57600080fd5b803590602001918460018302840111640100000000831117156100be57600080fd5b90919293919293905050506101ea565b005b3480156100dc57600080fd5b506100e5610243565b005b3480156100f357600080fd5b506100fc6103ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013457600080fd5b506101776004803603602081101561014b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f8565b005b34801561018557600080fd5b506101d26004803603604081101561019c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610608565b60405180821515815260200191505060405180910390f35b61023782828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506106e7565b61023f6107a1565b5050565b61024b6108bf565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461030d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104006108bf565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610548576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806110c96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006106126108bf565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6106df8333846108c7565b905092915050565b7f9586358b5895091f0ebfebde7118b5135333adbc7cad78410290244441e3bd226107106109e7565b8280519060200120610720610a6f565b610728610af7565b610730610b7f565b610738610c07565b604051808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018215158152602001965050505050505060405180910390a150565b60006107f16107ae610af7565b6107e36127106107d56107bf610af7565b6107c7610b7f565b610c4590919063ffffffff16565b610c8f90919063ffffffff16565b610d1590919063ffffffff16565b905060015481111561084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061113d602e913960400191505060405180910390fd5b610867610859610a6f565b33610862610b7f565b6108c7565b6108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110ef6024913960400191505060405180910390fd5b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610931576109288383610d5f565b600190506109e0565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156109a257600080fd5b505af11580156109b6573d6000803e3d6000fd5b505050506040513d60208110156109cc57600080fd5b810190808051906020019092919050505090505b9392505050565b60003373ffffffffffffffffffffffffffffffffffffffff166370348f3e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff166311eefd5d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d6020811015610ae157600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff1663ff69ac366040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3f57600080fd5b505afa158015610b53573d6000803e3d6000fd5b505050506040513d6020811015610b6957600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff16636f27e9d86040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc757600080fd5b505afa158015610bdb573d6000803e3d6000fd5b505050506040513d6020811015610bf157600080fd5b8101908080519060200190929190505050905090565b6000600173ffffffffffffffffffffffffffffffffffffffff16610c29610a6f565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000610c8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dd6565b905092915050565b600080831415610ca25760009050610d0f565b6000828402905082848281610cb357fe5b0414610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061116b6021913960400191505060405180910390fd5b809150505b92915050565b6000610d5783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e96565b905092915050565b80471015610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611113602a913960400191505060405180910390fd5b610dd2828260405180602001604052806000815250610f5c565b5050565b6000838311158290610e83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e48578082015181840152602081019050610e2d565b50505050905090810190601f168015610e755780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290610f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f07578082015181840152602081019050610eec565b50505050905090810190601f168015610f345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610f4e57fe5b049050809150509392505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b60208310610fac5780518252602082019150602081019050602083039250610f89565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461100e576040519150601f19603f3d011682016040523d82523d6000602084013e611013565b606091505b50915091508181906110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108557808201518184015260208101905061106a565b50505050905090810190601f1680156110b25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734b6f6c6c61746572616c496e766f6b61626c653a206661696c656420746f20726570617945787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e63654b6f6c6c61746572616c496e766f6b61626c653a2072657061796d656e742072657761726420746f6f2068696768536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207190101f64087553749713c497b1f0a7d8ebc9c7cccc553d25751c9ee60b98ab64736f6c63430007030033",
    "deployedBytecode": "0x60806040526004361061004e5760003560e01c806309c5eabe14610057578063715018a6146100d05780638da5cb5b146100e7578063f2fde38b14610128578063f3fef3a31461017957610055565b3661005557005b005b6100ce6004803603602081101561006d57600080fd5b810190808035906020019064010000000081111561008a57600080fd5b82018360208201111561009c57600080fd5b803590602001918460018302840111640100000000831117156100be57600080fd5b90919293919293905050506101ea565b005b3480156100dc57600080fd5b506100e5610243565b005b3480156100f357600080fd5b506100fc6103ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013457600080fd5b506101776004803603602081101561014b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103f8565b005b34801561018557600080fd5b506101d26004803603604081101561019c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610608565b60405180821515815260200191505060405180910390f35b61023782828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506106e7565b61023f6107a1565b5050565b61024b6108bf565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461030d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104006108bf565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610548576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806110c96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006106126108bf565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6106df8333846108c7565b905092915050565b7f9586358b5895091f0ebfebde7118b5135333adbc7cad78410290244441e3bd226107106109e7565b8280519060200120610720610a6f565b610728610af7565b610730610b7f565b610738610c07565b604051808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018215158152602001965050505050505060405180910390a150565b60006107f16107ae610af7565b6107e36127106107d56107bf610af7565b6107c7610b7f565b610c4590919063ffffffff16565b610c8f90919063ffffffff16565b610d1590919063ffffffff16565b905060015481111561084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061113d602e913960400191505060405180910390fd5b610867610859610a6f565b33610862610b7f565b6108c7565b6108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110ef6024913960400191505060405180910390fd5b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610931576109288383610d5f565b600190506109e0565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156109a257600080fd5b505af11580156109b6573d6000803e3d6000fd5b505050506040513d60208110156109cc57600080fd5b810190808051906020019092919050505090505b9392505050565b60003373ffffffffffffffffffffffffffffffffffffffff166370348f3e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff166311eefd5d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ab757600080fd5b505afa158015610acb573d6000803e3d6000fd5b505050506040513d6020811015610ae157600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff1663ff69ac366040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3f57600080fd5b505afa158015610b53573d6000803e3d6000fd5b505050506040513d6020811015610b6957600080fd5b8101908080519060200190929190505050905090565b60003373ffffffffffffffffffffffffffffffffffffffff16636f27e9d86040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc757600080fd5b505afa158015610bdb573d6000803e3d6000fd5b505050506040513d6020811015610bf157600080fd5b8101908080519060200190929190505050905090565b6000600173ffffffffffffffffffffffffffffffffffffffff16610c29610a6f565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000610c8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dd6565b905092915050565b600080831415610ca25760009050610d0f565b6000828402905082848281610cb357fe5b0414610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061116b6021913960400191505060405180910390fd5b809150505b92915050565b6000610d5783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e96565b905092915050565b80471015610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611113602a913960400191505060405180910390fd5b610dd2828260405180602001604052806000815250610f5c565b5050565b6000838311158290610e83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e48578082015181840152602081019050610e2d565b50505050905090810190601f168015610e755780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290610f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f07578082015181840152602081019050610eec565b50505050905090810190601f168015610f345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610f4e57fe5b049050809150509392505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b60208310610fac5780518252602082019150602081019050602083039250610f89565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461100e576040519150601f19603f3d011682016040523d82523d6000602084013e611013565b606091505b50915091508181906110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108557808201518184015260208101905061106a565b50505050905090810190601f1680156110b25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734b6f6c6c61746572616c496e766f6b61626c653a206661696c656420746f20726570617945787465726e616c43616c6c65723a20696e73756666696369656e742065746865722062616c616e63654b6f6c6c61746572616c496e766f6b61626c653a2072657061796d656e742072657761726420746f6f2068696768536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207190101f64087553749713c497b1f0a7d8ebc9c7cccc553d25751c9ee60b98ab64736f6c63430007030033",
    "immutableReferences": {},
    "generatedSources": [],
    "deployedGeneratedSources": [],
    "sourceMap": "863:919:31:-:0;;;957:3:5;922:38;;931:16:31;;;;;;;;;;1004:1:5;916:15:7;897:16;;:34;;;;;;;;;;;;;;;;;;850:88;865:17:39;885:12;:10;;;:12;;:::i;:::-;865:32;;916:9;907:6;;:18;;;;;;;;;;;;;;;;;;973:9;940:43;;969:1;940:43;;;;;;;;;;;;840:150;863:919:31;;590:104:38;643:15;677:10;670:17;;590:104;:::o;863:919:31:-;;;;;;;",
    "deployedSourceMap": "863:919:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1179:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1689:145:39;;;;;;;;;;;;;:::i;:::-;;1066:77;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1983:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1596:184:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1179:115;1253:16;1264:4;;1253:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:16::i;:::-;1280:7;:5;:7::i;:::-;1179:115;;:::o;1689:145:39:-;1280:12;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1:::1;1758:40;;1779:6;;;;;;;;;;;1758:40;;;;;;;;;;;;1825:1;1808:6;;:19;;;;;;;;;;;;;;;;;;1689:145::o:0;1066:77::-;1104:7;1130:6;;;;;;;;;;;1123:13;;1066:77;:::o;1983:240::-;1280:12;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:1:::1;2071:22;;:8;:22;;;;2063:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2180:8;2151:38;;2172:6;;;;;;;;;;;2151:38;;;;;;;;;;;;2208:8;2199:6;;:17;;;;;;;;;;;;;;;;;;1983:240:::0;:::o;1596:184:31:-;1704:4;1280:12:39;:10;:12::i;:::-;1270:22;;:6;;;;;;;;;;;:22;;;1262:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1731:42:31::1;1740:12;1754:10;1766:6;1731:8;:42::i;:::-;1724:49;;1596:184:::0;;;;:::o;1300:290::-;1363:220;1387:15;:13;:15::i;:::-;1426:4;1416:15;;;;;;1445:21;:19;:21::i;:::-;1480:20;:18;:20::i;:::-;1514:24;:22;:24::i;:::-;1552:21;:19;:21::i;:::-;1363:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1300:290;:::o;1087:276:5:-;2094:23;2120:126;2225:20;:18;:20::i;:::-;2120:87;2201:5;2120:63;2162:20;:18;:20::i;:::-;2120:24;:22;:24::i;:::-;:41;;:63;;;;:::i;:::-;:80;;:87;;;;:::i;:::-;:104;;:126;;;;:::i;:::-;2094:152;;2297:15;;2278;:34;;2257:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1163:131:::1;1189:21;:19;:21::i;:::-;1228:10;1256:24;:22;:24::i;:::-;1163:8;:131::i;:::-;1142:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1087:276:::0;:::o;590:104:38:-;643:15;677:10;670:17;;590:104;:::o;944:333:7:-;1060:4;1096:16;;;;;;;;;;;1080:32;;:12;:32;;;1076:195;;;1128:28;1145:2;1149:6;1128:16;:28::i;:::-;1177:4;1170:11;;;;1076:195;1226:12;1219:29;;;1249:2;1253:6;1219:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1212:48;;944:333;;;;;;:::o;1369:124:5:-;1417:7;1459:10;1443:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1436:50;;1369:124;:::o;1499:136::-;1553:7;1595:10;1579:47;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1572:56;;1499:136;:::o;1641:134::-;1694:7;1736:10;1720:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1713:55;;1641:134;:::o;1781:142::-;1838:7;1880:10;1864:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1857:59;;1781:142;:::o;1929:119::-;1983:4;2039:1;2006:35;;:21;:19;:21::i;:::-;:35;;;1999:42;;1929:119;:::o;1321:134:40:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;;1321:134;;;;:::o;2180:459::-;2238:7;2484:1;2479;:6;2475:45;;;2508:1;2501:8;;;;2475:45;2530:9;2546:1;2542;:5;2530:17;;2574:1;2569;2565;:5;;;;;;:10;2557:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2624:8;;;2180:459;;;;;:::o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3178:46;;3101:130;;;;:::o;695:240:9:-;815:6;790:21;:31;;769:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:29;912:3;917:6;899:29;;;;;;;;;;;;:12;:29::i;:::-;695:240;;:::o;1746:187:40:-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;3713:272::-;3799:7;3830:1;3826;:5;3833:12;3818:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;3856:17;;3977:1;3970:8;;;3713:272;;;;;:::o;941:267:9:-;1062:12;1076:23;1103:3;:8;;1119:6;1140:5;1103:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:94;;;;1173:7;1189:10;1165:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;941:267;;;;;:::o",
    "source": "/*\n\n    Copyright 2020 Kollateral LLC.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n*/\n\n// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"../common/invoke/KollateralInvokable.sol\";\n\n/*\n *  WARNING: ONLY FOR ON-CHAIN TESTING - THIS CONTRACT IS VULNERABLE TO LOSS OF FUNDS\n */\ncontract TestOnchainInvokable is KollateralInvokable, Ownable {\n    constructor() {}\n\n    event HelperDump(\n        address sender,\n        bytes32 dataHash,\n        address currentTokenAddress,\n        uint256 currentTokenAmount,\n        uint256 currentRepaymentAmount,\n        bool isCurrentTokenEther\n    );\n\n    function execute(bytes calldata data) external payable override {\n        emitHelper(data);\n\n        repay();\n    }\n\n    function emitHelper(bytes memory data) internal {\n        emit HelperDump(\n            currentSender(),\n            keccak256(data),\n            currentTokenAddress(),\n            currentTokenAmount(),\n            currentRepaymentAmount(),\n            isCurrentTokenEther()\n        );\n    }\n\n    function withdraw(address tokenAddress, uint256 amount)\n        external\n        onlyOwner\n        returns (bool)\n    {\n        return transfer(tokenAddress, msg.sender, amount);\n    }\n}\n",
    "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestOnchainInvokable.sol",
    "ast": {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestOnchainInvokable.sol",
        "exportedSymbols": {
            "BalanceCarrier": [
                1464
            ],
            "Context": [
                5279
            ],
            "ExternalCaller": [
                1563
            ],
            "IERC20": [
                6165
            ],
            "IInvocationHook": [
                1170
            ],
            "IInvokable": [
                1178
            ],
            "KollateralInvokable": [
                1380
            ],
            "Ownable": [
                5388
            ],
            "SafeMath": [
                5584
            ],
            "TestOnchainInvokable": [
                4415
            ]
        },
        "id": 4416,
        "license": "Apache-2.0",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4335,
                "literals": [
                    "solidity",
                    "^",
                    "0.7",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "640:23:31"
            },
            {
                "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                "file": "@openzeppelin/contracts/access/Ownable.sol",
                "id": 4336,
                "nodeType": "ImportDirective",
                "scope": 4416,
                "sourceUnit": 5389,
                "src": "665:52:31",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/KollateralInvokable.sol",
                "file": "../common/invoke/KollateralInvokable.sol",
                "id": 4337,
                "nodeType": "ImportDirective",
                "scope": 4416,
                "sourceUnit": 1381,
                "src": "718:50:31",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 4338,
                            "name": "KollateralInvokable",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 1380,
                            "src": "896:19:31",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_KollateralInvokable_$1380",
                                "typeString": "contract KollateralInvokable"
                            }
                        },
                        "id": 4339,
                        "nodeType": "InheritanceSpecifier",
                        "src": "896:19:31"
                    },
                    {
                        "baseName": {
                            "id": 4340,
                            "name": "Ownable",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 5388,
                            "src": "917:7:31",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Ownable_$5388",
                                "typeString": "contract Ownable"
                            }
                        },
                        "id": 4341,
                        "nodeType": "InheritanceSpecifier",
                        "src": "917:7:31"
                    }
                ],
                "contractDependencies": [
                    1178,
                    1380,
                    1464,
                    1563,
                    5279,
                    5388
                ],
                "contractKind": "contract",
                "fullyImplemented": true,
                "id": 4415,
                "linearizedBaseContracts": [
                    4415,
                    5388,
                    5279,
                    1380,
                    1464,
                    1563,
                    1178
                ],
                "name": "TestOnchainInvokable",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "body": {
                            "id": 4344,
                            "nodeType": "Block",
                            "src": "945:2:31",
                            "statements": []
                        },
                        "id": 4345,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4342,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "942:2:31"
                        },
                        "returnParameters": {
                            "id": 4343,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "945:0:31"
                        },
                        "scope": 4415,
                        "src": "931:16:31",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "anonymous": false,
                        "id": 4359,
                        "name": "HelperDump",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 4358,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4347,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4359,
                                    "src": "979:14:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4346,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "979:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4349,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "dataHash",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4359,
                                    "src": "1003:16:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 4348,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1003:7:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4351,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "currentTokenAddress",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4359,
                                    "src": "1029:27:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4350,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1029:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4353,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "currentTokenAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4359,
                                    "src": "1066:26:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4352,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1066:7:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4355,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "currentRepaymentAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4359,
                                    "src": "1102:30:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4354,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1102:7:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4357,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "isCurrentTokenEther",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4359,
                                    "src": "1142:24:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4356,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1142:4:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "969:203:31"
                        },
                        "src": "953:220:31"
                    },
                    {
                        "baseFunctions": [
                            1177
                        ],
                        "body": {
                            "id": 4372,
                            "nodeType": "Block",
                            "src": "1243:51:31",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4366,
                                                "name": "data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4361,
                                                "src": "1264:4:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "id": 4365,
                                            "name": "emitHelper",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4395,
                                            "src": "1253:10:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                                                "typeString": "function (bytes memory)"
                                            }
                                        },
                                        "id": 4367,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1253:16:31",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4368,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1253:16:31"
                                },
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 4369,
                                            "name": "repay",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1286,
                                            "src": "1280:5:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 4370,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1280:7:31",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4371,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1280:7:31"
                                }
                            ]
                        },
                        "functionSelector": "09c5eabe",
                        "id": 4373,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "execute",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4363,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1234:8:31"
                        },
                        "parameters": {
                            "id": 4362,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4361,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4373,
                                    "src": "1196:19:31",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4360,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1196:5:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1195:21:31"
                        },
                        "returnParameters": {
                            "id": 4364,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1243:0:31"
                        },
                        "scope": 4415,
                        "src": "1179:115:31",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4394,
                            "nodeType": "Block",
                            "src": "1348:242:31",
                            "statements": [
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 4379,
                                                    "name": "currentSender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1299,
                                                    "src": "1387:13:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                                        "typeString": "function () view returns (address)"
                                                    }
                                                },
                                                "id": 4380,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1387:15:31",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 4382,
                                                        "name": "data",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4375,
                                                        "src": "1426:4:31",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "id": 4381,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "1416:9:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 4383,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1416:15:31",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 4384,
                                                    "name": "currentTokenAddress",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1312,
                                                    "src": "1445:19:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                                        "typeString": "function () view returns (address)"
                                                    }
                                                },
                                                "id": 4385,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1445:21:31",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 4386,
                                                    "name": "currentTokenAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1325,
                                                    "src": "1480:18:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 4387,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1480:20:31",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 4388,
                                                    "name": "currentRepaymentAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1338,
                                                    "src": "1514:22:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 4389,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1514:24:31",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 4390,
                                                    "name": "isCurrentTokenEther",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1352,
                                                    "src": "1552:19:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                                        "typeString": "function () view returns (bool)"
                                                    }
                                                },
                                                "id": 4391,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1552:21:31",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            ],
                                            "id": 4378,
                                            "name": "HelperDump",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4359,
                                            "src": "1363:10:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$",
                                                "typeString": "function (address,bytes32,address,uint256,uint256,bool)"
                                            }
                                        },
                                        "id": 4392,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1363:220:31",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4393,
                                    "nodeType": "EmitStatement",
                                    "src": "1358:225:31"
                                }
                            ]
                        },
                        "id": 4395,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "emitHelper",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4376,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4375,
                                    "mutability": "mutable",
                                    "name": "data",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4395,
                                    "src": "1320:17:31",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4374,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1320:5:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1319:19:31"
                        },
                        "returnParameters": {
                            "id": 4377,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1348:0:31"
                        },
                        "scope": 4415,
                        "src": "1300:290:31",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 4413,
                            "nodeType": "Block",
                            "src": "1714:66:31",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 4407,
                                                "name": "tokenAddress",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4397,
                                                "src": "1740:12:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 4408,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "1754:3:31",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 4409,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "1754:10:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 4410,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4399,
                                                "src": "1766:6:31",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4406,
                                            "name": "transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1433,
                                            "src": "1731:8:31",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                "typeString": "function (address,address,uint256) returns (bool)"
                                            }
                                        },
                                        "id": 4411,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1731:42:31",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "functionReturnParameters": 4405,
                                    "id": 4412,
                                    "nodeType": "Return",
                                    "src": "1724:49:31"
                                }
                            ]
                        },
                        "functionSelector": "f3fef3a3",
                        "id": 4414,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 4402,
                                "modifierName": {
                                    "id": 4401,
                                    "name": "onlyOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5337,
                                    "src": "1677:9:31",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "1677:9:31"
                            }
                        ],
                        "name": "withdraw",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 4400,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4397,
                                    "mutability": "mutable",
                                    "name": "tokenAddress",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4414,
                                    "src": "1614:20:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4396,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1614:7:31",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4399,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4414,
                                    "src": "1636:14:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4398,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1636:7:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1613:38:31"
                        },
                        "returnParameters": {
                            "id": 4405,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4404,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4414,
                                    "src": "1704:4:31",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4403,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1704:4:31",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1703:6:31"
                        },
                        "scope": 4415,
                        "src": "1596:184:31",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 4416,
                "src": "863:919:31"
            }
        ],
        "src": "640:1143:31"
    },
    "legacyAST": {
        "attributes": {
            "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/testing/TestOnchainInvokable.sol",
            "exportedSymbols": {
                "BalanceCarrier": [
                    1464
                ],
                "Context": [
                    5279
                ],
                "ExternalCaller": [
                    1563
                ],
                "IERC20": [
                    6165
                ],
                "IInvocationHook": [
                    1170
                ],
                "IInvokable": [
                    1178
                ],
                "KollateralInvokable": [
                    1380
                ],
                "Ownable": [
                    5388
                ],
                "SafeMath": [
                    5584
                ],
                "TestOnchainInvokable": [
                    4415
                ]
            },
            "license": "Apache-2.0"
        },
        "children": [
            {
                "attributes": {
                    "literals": [
                        "solidity",
                        "^",
                        "0.7",
                        ".0"
                    ]
                },
                "id": 4335,
                "name": "PragmaDirective",
                "src": "640:23:31"
            },
            {
                "attributes": {
                    "SourceUnit": 5389,
                    "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                    "file": "@openzeppelin/contracts/access/Ownable.sol",
                    "scope": 4416,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 4336,
                "name": "ImportDirective",
                "src": "665:52:31"
            },
            {
                "attributes": {
                    "SourceUnit": 1381,
                    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/KollateralInvokable.sol",
                    "file": "../common/invoke/KollateralInvokable.sol",
                    "scope": 4416,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 4337,
                "name": "ImportDirective",
                "src": "718:50:31"
            },
            {
                "attributes": {
                    "abstract": false,
                    "contractDependencies": [
                        1178,
                        1380,
                        1464,
                        1563,
                        5279,
                        5388
                    ],
                    "contractKind": "contract",
                    "fullyImplemented": true,
                    "linearizedBaseContracts": [
                        4415,
                        5388,
                        5279,
                        1380,
                        1464,
                        1563,
                        1178
                    ],
                    "name": "TestOnchainInvokable",
                    "scope": 4416
                },
                "children": [
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "KollateralInvokable",
                                    "referencedDeclaration": 1380,
                                    "type": "contract KollateralInvokable"
                                },
                                "id": 4338,
                                "name": "UserDefinedTypeName",
                                "src": "896:19:31"
                            }
                        ],
                        "id": 4339,
                        "name": "InheritanceSpecifier",
                        "src": "896:19:31"
                    },
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "Ownable",
                                    "referencedDeclaration": 5388,
                                    "type": "contract Ownable"
                                },
                                "id": 4340,
                                "name": "UserDefinedTypeName",
                                "src": "917:7:31"
                            }
                        ],
                        "id": 4341,
                        "name": "InheritanceSpecifier",
                        "src": "917:7:31"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": true,
                            "kind": "constructor",
                            "modifiers": [
                                null
                            ],
                            "name": "",
                            "scope": 4415,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 4342,
                                "name": "ParameterList",
                                "src": "942:2:31"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 4343,
                                "name": "ParameterList",
                                "src": "945:0:31"
                            },
                            {
                                "attributes": {
                                    "statements": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 4344,
                                "name": "Block",
                                "src": "945:2:31"
                            }
                        ],
                        "id": 4345,
                        "name": "FunctionDefinition",
                        "src": "931:16:31"
                    },
                    {
                        "attributes": {
                            "anonymous": false,
                            "name": "HelperDump"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "sender",
                                            "scope": 4359,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 4346,
                                                "name": "ElementaryTypeName",
                                                "src": "979:7:31"
                                            }
                                        ],
                                        "id": 4347,
                                        "name": "VariableDeclaration",
                                        "src": "979:14:31"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "dataHash",
                                            "scope": 4359,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bytes32",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bytes32",
                                                    "type": "bytes32"
                                                },
                                                "id": 4348,
                                                "name": "ElementaryTypeName",
                                                "src": "1003:7:31"
                                            }
                                        ],
                                        "id": 4349,
                                        "name": "VariableDeclaration",
                                        "src": "1003:16:31"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "currentTokenAddress",
                                            "scope": 4359,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 4350,
                                                "name": "ElementaryTypeName",
                                                "src": "1029:7:31"
                                            }
                                        ],
                                        "id": 4351,
                                        "name": "VariableDeclaration",
                                        "src": "1029:27:31"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "currentTokenAmount",
                                            "scope": 4359,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 4352,
                                                "name": "ElementaryTypeName",
                                                "src": "1066:7:31"
                                            }
                                        ],
                                        "id": 4353,
                                        "name": "VariableDeclaration",
                                        "src": "1066:26:31"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "currentRepaymentAmount",
                                            "scope": 4359,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 4354,
                                                "name": "ElementaryTypeName",
                                                "src": "1102:7:31"
                                            }
                                        ],
                                        "id": 4355,
                                        "name": "VariableDeclaration",
                                        "src": "1102:30:31"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "isCurrentTokenEther",
                                            "scope": 4359,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 4356,
                                                "name": "ElementaryTypeName",
                                                "src": "1142:4:31"
                                            }
                                        ],
                                        "id": 4357,
                                        "name": "VariableDeclaration",
                                        "src": "1142:24:31"
                                    }
                                ],
                                "id": 4358,
                                "name": "ParameterList",
                                "src": "969:203:31"
                            }
                        ],
                        "id": 4359,
                        "name": "EventDefinition",
                        "src": "953:220:31"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                1177
                            ],
                            "functionSelector": "09c5eabe",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "execute",
                            "scope": 4415,
                            "stateMutability": "payable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 4363,
                                "name": "OverrideSpecifier",
                                "src": "1234:8:31"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "data",
                                            "scope": 4373,
                                            "stateVariable": false,
                                            "storageLocation": "calldata",
                                            "type": "bytes",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bytes",
                                                    "type": "bytes"
                                                },
                                                "id": 4360,
                                                "name": "ElementaryTypeName",
                                                "src": "1196:5:31"
                                            }
                                        ],
                                        "id": 4361,
                                        "name": "VariableDeclaration",
                                        "src": "1196:19:31"
                                    }
                                ],
                                "id": 4362,
                                "name": "ParameterList",
                                "src": "1195:21:31"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 4364,
                                "name": "ParameterList",
                                "src": "1243:0:31"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                                    "typeString": "bytes calldata"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 4395,
                                                            "type": "function (bytes memory)",
                                                            "value": "emitHelper"
                                                        },
                                                        "id": 4365,
                                                        "name": "Identifier",
                                                        "src": "1253:10:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 4361,
                                                            "type": "bytes calldata",
                                                            "value": "data"
                                                        },
                                                        "id": 4366,
                                                        "name": "Identifier",
                                                        "src": "1264:4:31"
                                                    }
                                                ],
                                                "id": 4367,
                                                "name": "FunctionCall",
                                                "src": "1253:16:31"
                                            }
                                        ],
                                        "id": 4368,
                                        "name": "ExpressionStatement",
                                        "src": "1253:16:31"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "arguments": [
                                                        null
                                                    ],
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                null
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1286,
                                                            "type": "function ()",
                                                            "value": "repay"
                                                        },
                                                        "id": 4369,
                                                        "name": "Identifier",
                                                        "src": "1280:5:31"
                                                    }
                                                ],
                                                "id": 4370,
                                                "name": "FunctionCall",
                                                "src": "1280:7:31"
                                            }
                                        ],
                                        "id": 4371,
                                        "name": "ExpressionStatement",
                                        "src": "1280:7:31"
                                    }
                                ],
                                "id": 4372,
                                "name": "Block",
                                "src": "1243:51:31"
                            }
                        ],
                        "id": 4373,
                        "name": "FunctionDefinition",
                        "src": "1179:115:31"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "emitHelper",
                            "scope": 4415,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "data",
                                            "scope": 4395,
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "type": "bytes",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bytes",
                                                    "type": "bytes"
                                                },
                                                "id": 4374,
                                                "name": "ElementaryTypeName",
                                                "src": "1320:5:31"
                                            }
                                        ],
                                        "id": 4375,
                                        "name": "VariableDeclaration",
                                        "src": "1320:17:31"
                                    }
                                ],
                                "id": 4376,
                                "name": "ParameterList",
                                "src": "1319:19:31"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 4377,
                                "name": "ParameterList",
                                "src": "1348:0:31"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 4359,
                                                            "type": "function (address,bytes32,address,uint256,uint256,bool)",
                                                            "value": "HelperDump"
                                                        },
                                                        "id": 4378,
                                                        "name": "Identifier",
                                                        "src": "1363:10:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1299,
                                                                    "type": "function () view returns (address)",
                                                                    "value": "currentSender"
                                                                },
                                                                "id": 4379,
                                                                "name": "Identifier",
                                                                "src": "1387:13:31"
                                                            }
                                                        ],
                                                        "id": 4380,
                                                        "name": "FunctionCall",
                                                        "src": "1387:15:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "bytes32",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                                            "typeString": "bytes memory"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": -8,
                                                                    "type": "function (bytes memory) pure returns (bytes32)",
                                                                    "value": "keccak256"
                                                                },
                                                                "id": 4381,
                                                                "name": "Identifier",
                                                                "src": "1416:9:31"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 4375,
                                                                    "type": "bytes memory",
                                                                    "value": "data"
                                                                },
                                                                "id": 4382,
                                                                "name": "Identifier",
                                                                "src": "1426:4:31"
                                                            }
                                                        ],
                                                        "id": 4383,
                                                        "name": "FunctionCall",
                                                        "src": "1416:15:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1312,
                                                                    "type": "function () view returns (address)",
                                                                    "value": "currentTokenAddress"
                                                                },
                                                                "id": 4384,
                                                                "name": "Identifier",
                                                                "src": "1445:19:31"
                                                            }
                                                        ],
                                                        "id": 4385,
                                                        "name": "FunctionCall",
                                                        "src": "1445:21:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1325,
                                                                    "type": "function () view returns (uint256)",
                                                                    "value": "currentTokenAmount"
                                                                },
                                                                "id": 4386,
                                                                "name": "Identifier",
                                                                "src": "1480:18:31"
                                                            }
                                                        ],
                                                        "id": 4387,
                                                        "name": "FunctionCall",
                                                        "src": "1480:20:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1338,
                                                                    "type": "function () view returns (uint256)",
                                                                    "value": "currentRepaymentAmount"
                                                                },
                                                                "id": 4388,
                                                                "name": "Identifier",
                                                                "src": "1514:22:31"
                                                            }
                                                        ],
                                                        "id": 4389,
                                                        "name": "FunctionCall",
                                                        "src": "1514:24:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "bool",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1352,
                                                                    "type": "function () view returns (bool)",
                                                                    "value": "isCurrentTokenEther"
                                                                },
                                                                "id": 4390,
                                                                "name": "Identifier",
                                                                "src": "1552:19:31"
                                                            }
                                                        ],
                                                        "id": 4391,
                                                        "name": "FunctionCall",
                                                        "src": "1552:21:31"
                                                    }
                                                ],
                                                "id": 4392,
                                                "name": "FunctionCall",
                                                "src": "1363:220:31"
                                            }
                                        ],
                                        "id": 4393,
                                        "name": "EmitStatement",
                                        "src": "1358:225:31"
                                    }
                                ],
                                "id": 4394,
                                "name": "Block",
                                "src": "1348:242:31"
                            }
                        ],
                        "id": 4395,
                        "name": "FunctionDefinition",
                        "src": "1300:290:31"
                    },
                    {
                        "attributes": {
                            "functionSelector": "f3fef3a3",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "withdraw",
                            "scope": 4415,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "tokenAddress",
                                            "scope": 4414,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 4396,
                                                "name": "ElementaryTypeName",
                                                "src": "1614:7:31"
                                            }
                                        ],
                                        "id": 4397,
                                        "name": "VariableDeclaration",
                                        "src": "1614:20:31"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 4414,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 4398,
                                                "name": "ElementaryTypeName",
                                                "src": "1636:7:31"
                                            }
                                        ],
                                        "id": 4399,
                                        "name": "VariableDeclaration",
                                        "src": "1636:14:31"
                                    }
                                ],
                                "id": 4400,
                                "name": "ParameterList",
                                "src": "1613:38:31"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 4414,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 4403,
                                                "name": "ElementaryTypeName",
                                                "src": "1704:4:31"
                                            }
                                        ],
                                        "id": 4404,
                                        "name": "VariableDeclaration",
                                        "src": "1704:4:31"
                                    }
                                ],
                                "id": 4405,
                                "name": "ParameterList",
                                "src": "1703:6:31"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 5337,
                                            "type": "modifier ()",
                                            "value": "onlyOwner"
                                        },
                                        "id": 4401,
                                        "name": "Identifier",
                                        "src": "1677:9:31"
                                    }
                                ],
                                "id": 4402,
                                "name": "ModifierInvocation",
                                "src": "1677:9:31"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 4405
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "bool",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1433,
                                                            "type": "function (address,address,uint256) returns (bool)",
                                                            "value": "transfer"
                                                        },
                                                        "id": 4406,
                                                        "name": "Identifier",
                                                        "src": "1731:8:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 4397,
                                                            "type": "address",
                                                            "value": "tokenAddress"
                                                        },
                                                        "id": 4407,
                                                        "name": "Identifier",
                                                        "src": "1740:12:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "sender",
                                                            "type": "address payable"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": -15,
                                                                    "type": "msg",
                                                                    "value": "msg"
                                                                },
                                                                "id": 4408,
                                                                "name": "Identifier",
                                                                "src": "1754:3:31"
                                                            }
                                                        ],
                                                        "id": 4409,
                                                        "name": "MemberAccess",
                                                        "src": "1754:10:31"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 4399,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 4410,
                                                        "name": "Identifier",
                                                        "src": "1766:6:31"
                                                    }
                                                ],
                                                "id": 4411,
                                                "name": "FunctionCall",
                                                "src": "1731:42:31"
                                            }
                                        ],
                                        "id": 4412,
                                        "name": "Return",
                                        "src": "1724:49:31"
                                    }
                                ],
                                "id": 4413,
                                "name": "Block",
                                "src": "1714:66:31"
                            }
                        ],
                        "id": 4414,
                        "name": "FunctionDefinition",
                        "src": "1596:184:31"
                    }
                ],
                "id": 4415,
                "name": "ContractDefinition",
                "src": "863:919:31"
            }
        ],
        "id": 4416,
        "name": "SourceUnit",
        "src": "640:1143:31"
    },
    "compiler": {
        "name": "solc",
        "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.3.3",
    "updatedAt": "2021-02-01T23:13:33.264Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            }
        },
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
    }
}
