{
    "contractName": "KToken",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "invokeTo",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "invokeValue",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "invokeDataHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "underlyingAmount",
                    "type": "uint256"
                }
            ],
            "name": "Invocation",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "minter",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "tokenAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "kTokenAmount",
                    "type": "uint256"
                }
            ],
            "name": "Mint",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "redeemer",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "tokenAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "kTokenAmount",
                    "type": "uint256"
                }
            ],
            "name": "Redeem",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "poolReward",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "platformReward",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                }
            ],
            "name": "Reward",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "balanceOfUnderlying",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isUnderlyingEther",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "nativeAmount",
                    "type": "uint256"
                }
            ],
            "name": "nativeAmountToUnderlyingAmount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "paused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "kTokenAmount",
                    "type": "uint256"
                }
            ],
            "name": "redeem",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenAmount",
                    "type": "uint256"
                }
            ],
            "name": "redeemUnderlying",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalReserve",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "underlying",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "underlyingAmount",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "ceil",
                    "type": "bool"
                }
            ],
            "name": "underlyingAmountToNativeAmount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "invokeTo",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "invokeData",
                    "type": "bytes"
                },
                {
                    "internalType": "uint256",
                    "name": "underlyingAmount",
                    "type": "uint256"
                }
            ],
            "name": "invoke",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenAmount",
                    "type": "uint256"
                }
            ],
            "name": "calculateRepaymentAmount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "poolReward",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "platformReward",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "platformVaultAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isKToken",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "currentSender",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "currentTokenAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "currentTokenAmount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "currentRepaymentAmount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "poolRewardBips",
                    "type": "uint256"
                }
            ],
            "name": "setPoolReward",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "platformRewardBips",
                    "type": "uint256"
                }
            ],
            "name": "setPlatformReward",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newPlatformVaultAddress",
                    "type": "address"
                }
            ],
            "name": "setPlatformVaultAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"invokeTo\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invokeValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"invokeDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"}],\"name\":\"Invocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"platformReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"Reward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"calculateRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invokeTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"invokeData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"}],\"name\":\"invoke\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isKToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnderlyingEther\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nativeAmount\",\"type\":\"uint256\"}],\"name\":\"nativeAmountToUnderlyingAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformVaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"kTokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"platformRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPlatformReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPlatformVaultAddress\",\"type\":\"address\"}],\"name\":\"setPlatformVaultAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolRewardBips\",\"type\":\"uint256\"}],\"name\":\"setPoolReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"ceil\",\"type\":\"bool\"}],\"name\":\"underlyingAmountToNativeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"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.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"},\"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/ktoken/KToken.sol\":\"KToken\"},\"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/utils/ExtendedMath.sol\":{\"keccak256\":\"0x5ced249631b5dfe431f449d725d9f318b01ab0785306ca5e73cdf43760ab271a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3f3aef65abfcc02e451ad27a849caba0e6375abb26e28e7605928d19d561c3dd\",\"dweb:/ipfs/QmY5zMeH5x3QMS5xkxkY3DH4SDPWLGJyfPk1R8wPJXH9vr\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol\":{\"keccak256\":\"0xc8c0d9869f316491406bc2d135d00682926f2a4b62fe1e3a6daf5b37515bbe8b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://856af08828c3a5516a4018bdd2ed93eea5c02e60305bbc7e31fd8bd46446a97b\",\"dweb:/ipfs/QmVFroDk751zBN2fM6TiwCyhUinzGt2sRPwT3DUhnVgczU\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol\":{\"keccak256\":\"0xfaaaa4324c6cc78d9d1268426eb04fe41d8584ade05bbf22eac4875ecdf174d7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1e4149a0ecd14003c261b2243adfc19d7a009c83c32341ebdd6a8929c0bdd14d\",\"dweb:/ipfs/QmQbySda22WBU4oycYfrTye1RsJuz1Ub74ksoST7PeegHW\"]},\"/Users/andrekorol/src/kollateral/protocol/contracts/token/UnlimitedApprovalErc20.sol\":{\"keccak256\":\"0x407178fcd78f0a19d705e64aaaa26ae997d228f077f3cf6833f9f3eb31c72308\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://097906cbe6f8f35ba1763bd122d551ec302f45cf677021bbcdb8a55c706940d9\",\"dweb:/ipfs/QmVh7kcUWsXt3QApppB1njhGHfzdP813KSTUF6bh3VCmMM\"]},\"@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/ERC20.sol\":{\"keccak256\":\"0x482b6d82ba1c9c73758ae15068a438361d4187b7a4e342db17ef0f828cb5e21a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89725e56bc9c6cfb69521ceaa4a489561b928e930b71e30db85b24024c1c2c03\",\"dweb:/ipfs/QmNvpotZA1Fe48msV6TShSTVxeQ2dkaDS9MTKP4bNxyUG3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2a245b797741f05f91212b1c2155a1b99a8884e6fd4c27953c4d3073732737f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76325ec3159cd859da98cab114513ec81095fa38e1412ffffb9b789bf14d6b38\",\"dweb:/ipfs/QmNdE2779u3DdRczjpx6RoevVa9kVJsCyEfnXWjkUw79jo\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x1153f6dd334c01566417b8c551122450542a2b75a2bbb379d59a8c320ed6da28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://002b4e5c26a2a069ba42486b83bf9c4b5461f3d5def32f9ef52b0aef8905d6d2\",\"dweb:/ipfs/QmPG44XDF4npiqRzzGvqJroDtUKfcR78wcreQ9bXa6guW6\"]}},\"version\":1}",
    "bytecode": "0x",
    "deployedBytecode": "0x",
    "immutableReferences": {},
    "generatedSources": [],
    "deployedGeneratedSources": [],
    "sourceMap": "",
    "deployedSourceMap": "",
    "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/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\nimport \"../token/CollateralizedToken.sol\";\nimport \"../common/invoke/IInvocationHook.sol\";\nimport \"../common/invoke/IInvokable.sol\";\n\nabstract contract KToken is\n    IInvocationHook,\n    CollateralizedToken,\n    Ownable,\n    Pausable\n{\n    using SafeMath for uint256;\n\n    event Invocation(\n        address invokeTo,\n        uint256 invokeValue,\n        bytes32 invokeDataHash,\n        uint256 underlyingAmount\n    );\n    event Reward(\n        uint256 poolReward,\n        uint256 platformReward,\n        address tokenAddress\n    );\n\n    /* Reward (in bips) distributed to pool per transaction */\n    uint256 internal _poolRewardBips;\n\n    /* Reward (in bips) distributed to platform per transaction */\n    uint256 internal _platformRewardBips;\n\n    /* Address that collects the platform reward disbursements */\n    address internal _platformVaultAddress;\n\n    /* Helper - store called token amount for retrieval */\n    address internal _currentSender;\n\n    /* Helper - store called token amount for retrieval */\n    uint256 internal _currentTokenAmount;\n\n    /* Helper - store expected balance for currently executing transaction */\n    uint256 internal _currentExpectedBalance;\n\n    constructor() {}\n\n    function invoke(\n        address invokeTo,\n        bytes calldata invokeData,\n        uint256 underlyingAmount\n    ) external payable nonReentrant whenNotPaused {\n        require(\n            invokeTo != address(this),\n            \"KToken: cannot invoke this contract\"\n        );\n\n        /* Record starting and expected ending balance */\n        uint256 startingBalance = totalReserve().sub(\n            payableReserveAdjustment()\n        );\n        setInvocationState(\n            msg.sender,\n            underlyingAmount,\n            calculateExpectedBalance(startingBalance, underlyingAmount)\n        );\n\n        /* Transfer invocation amount of underlying token to caller's invocation address */\n        require(\n            transferUnderlying(invokeTo, underlyingAmount),\n            \"KToken: unable to transfer invocation amount\"\n        );\n\n        /* Invoke caller's function */\n        IInvokable(invokeTo).execute{value: msg.value}(invokeData);\n        emit Invocation(\n            invokeTo,\n            msg.value,\n            keccak256(invokeData),\n            underlyingAmount\n        );\n\n        /* Verify tokens were returned with correct reward */\n        require(\n            totalReserve() == _currentExpectedBalance,\n            \"KToken: incorrect ending balance\"\n        );\n\n        /* Extract platform reward */\n        uint256 platformReward = calculatePlatformReward(underlyingAmount);\n\n        require(\n            transferUnderlying(_platformVaultAddress, platformReward),\n            \"KToken: unable to transfer platform reward\"\n        );\n        emit Reward(\n            calculatePoolReward(underlyingAmount),\n            platformReward,\n            underlying()\n        );\n\n        /* Reset data for gas refund */\n        setInvocationState(address(0), 0, 0);\n    }\n\n    function payableReserveAdjustment()\n        internal\n        view\n        virtual\n        returns (uint256)\n    {\n        return 0;\n    }\n\n    function setInvocationState(\n        address currentSender,\n        uint256 currentTokenAmount,\n        uint256 currentExpectedBalance\n    ) internal {\n        _currentSender = currentSender;\n        _currentTokenAmount = currentTokenAmount;\n        _currentExpectedBalance = currentExpectedBalance;\n    }\n\n    function calculatePoolReward(uint256 tokenAmount)\n        internal\n        view\n        returns (uint256)\n    {\n        return tokenAmount.mul(_poolRewardBips).div(10000);\n    }\n\n    function calculatePlatformReward(uint256 tokenAmount)\n        internal\n        view\n        returns (uint256)\n    {\n        return tokenAmount.mul(_platformRewardBips).div(10000);\n    }\n\n    function calculateExpectedBalance(\n        uint256 startingBalance,\n        uint256 tokenAmount\n    ) internal view returns (uint256) {\n        return\n            startingBalance.add(calculatePoolReward(tokenAmount)).add(\n                calculatePlatformReward(tokenAmount)\n            );\n    }\n\n    function calculateRepaymentAmount(uint256 tokenAmount)\n        external\n        view\n        returns (uint256)\n    {\n        return\n            tokenAmount.add(calculatePoolReward(tokenAmount)).add(\n                calculatePlatformReward(tokenAmount)\n            );\n    }\n\n    function poolReward() external view returns (uint256) {\n        return _poolRewardBips;\n    }\n\n    function platformReward() external view returns (uint256) {\n        return _platformRewardBips;\n    }\n\n    function platformVaultAddress() external view returns (address) {\n        return _platformVaultAddress;\n    }\n\n    function isKToken() external pure returns (bool) {\n        return true;\n    }\n\n    /* Helper hook for invoked transaction */\n    function currentSender() external view override returns (address) {\n        return _currentSender;\n    }\n\n    function currentTokenAddress() external view override returns (address) {\n        return _underlying;\n    }\n\n    function currentTokenAmount() external view override returns (uint256) {\n        return _currentTokenAmount;\n    }\n\n    function currentRepaymentAmount() external view override returns (uint256) {\n        return _currentExpectedBalance.sub(totalReserve());\n    }\n\n    /* ADMIN FUNCTIONS */\n\n    function setPoolReward(uint256 poolRewardBips) external onlyOwner {\n        _poolRewardBips = poolRewardBips;\n    }\n\n    function setPlatformReward(uint256 platformRewardBips) external onlyOwner {\n        _platformRewardBips = platformRewardBips;\n    }\n\n    function setPlatformVaultAddress(address newPlatformVaultAddress)\n        external\n        onlyOwner\n    {\n        _platformVaultAddress = newPlatformVaultAddress;\n    }\n\n    function pause() external onlyOwner whenNotPaused {\n        _pause();\n    }\n\n    function unpause() external onlyOwner whenPaused {\n        _unpause();\n    }\n}\n",
    "sourcePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
    "ast": {
        "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
        "exportedSymbols": {
            "CollateralizedToken": [
                5197
            ],
            "Context": [
                5279
            ],
            "ERC20": [
                6087
            ],
            "ExtendedMath": [
                1506
            ],
            "IERC20": [
                6165
            ],
            "IInvocationHook": [
                1170
            ],
            "IInvokable": [
                1178
            ],
            "KToken": [
                2115
            ],
            "Ownable": [
                5388
            ],
            "Pausable": [
                6255
            ],
            "ReentrancyGuard": [
                6295
            ],
            "SafeMath": [
                5584
            ],
            "UnlimitedApprovalErc20": [
                5256
            ]
        },
        "id": 2116,
        "license": "Apache-2.0",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 1718,
                "literals": [
                    "solidity",
                    "^",
                    "0.7",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "640:23:14"
            },
            {
                "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                "file": "@openzeppelin/contracts/math/SafeMath.sol",
                "id": 1719,
                "nodeType": "ImportDirective",
                "scope": 2116,
                "sourceUnit": 5585,
                "src": "665:51:14",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                "file": "@openzeppelin/contracts/access/Ownable.sol",
                "id": 1720,
                "nodeType": "ImportDirective",
                "scope": 2116,
                "sourceUnit": 5389,
                "src": "717:52:14",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
                "file": "@openzeppelin/contracts/utils/Pausable.sol",
                "id": 1721,
                "nodeType": "ImportDirective",
                "scope": 2116,
                "sourceUnit": 6256,
                "src": "770:52:14",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol",
                "file": "../token/CollateralizedToken.sol",
                "id": 1722,
                "nodeType": "ImportDirective",
                "scope": 2116,
                "sourceUnit": 5198,
                "src": "823:42:14",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol",
                "file": "../common/invoke/IInvocationHook.sol",
                "id": 1723,
                "nodeType": "ImportDirective",
                "scope": 2116,
                "sourceUnit": 1171,
                "src": "866:46:14",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol",
                "file": "../common/invoke/IInvokable.sol",
                "id": 1724,
                "nodeType": "ImportDirective",
                "scope": 2116,
                "sourceUnit": 1179,
                "src": "913:41:14",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": true,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 1725,
                            "name": "IInvocationHook",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 1170,
                            "src": "988:15:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IInvocationHook_$1170",
                                "typeString": "contract IInvocationHook"
                            }
                        },
                        "id": 1726,
                        "nodeType": "InheritanceSpecifier",
                        "src": "988:15:14"
                    },
                    {
                        "baseName": {
                            "id": 1727,
                            "name": "CollateralizedToken",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 5197,
                            "src": "1009:19:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CollateralizedToken_$5197",
                                "typeString": "contract CollateralizedToken"
                            }
                        },
                        "id": 1728,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1009:19:14"
                    },
                    {
                        "baseName": {
                            "id": 1729,
                            "name": "Ownable",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 5388,
                            "src": "1034:7:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Ownable_$5388",
                                "typeString": "contract Ownable"
                            }
                        },
                        "id": 1730,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1034:7:14"
                    },
                    {
                        "baseName": {
                            "id": 1731,
                            "name": "Pausable",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6255,
                            "src": "1047:8:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Pausable_$6255",
                                "typeString": "contract Pausable"
                            }
                        },
                        "id": 1732,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1047:8:14"
                    }
                ],
                "contractDependencies": [
                    1170,
                    1506,
                    5197,
                    5256,
                    5279,
                    5388,
                    6087,
                    6165,
                    6255,
                    6295
                ],
                "contractKind": "contract",
                "fullyImplemented": false,
                "id": 2115,
                "linearizedBaseContracts": [
                    2115,
                    6255,
                    5388,
                    5197,
                    1506,
                    6295,
                    5256,
                    6087,
                    6165,
                    5279,
                    1170
                ],
                "name": "KToken",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 1735,
                        "libraryName": {
                            "id": 1733,
                            "name": "SafeMath",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 5584,
                            "src": "1068:8:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SafeMath_$5584",
                                "typeString": "library SafeMath"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "1062:27:14",
                        "typeName": {
                            "id": 1734,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1081:7:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        }
                    },
                    {
                        "anonymous": false,
                        "id": 1745,
                        "name": "Invocation",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 1744,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1737,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "invokeTo",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1745,
                                    "src": "1121:16:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1736,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1121:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1739,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "invokeValue",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1745,
                                    "src": "1147:19:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1738,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1147:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1741,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "invokeDataHash",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1745,
                                    "src": "1176:22:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 1740,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1176:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1743,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "underlyingAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1745,
                                    "src": "1208:24:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1742,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1208:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1111:127:14"
                        },
                        "src": "1095:144:14"
                    },
                    {
                        "anonymous": false,
                        "id": 1753,
                        "name": "Reward",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 1752,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1747,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "poolReward",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1753,
                                    "src": "1266:18:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1746,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1266:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1749,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "platformReward",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1753,
                                    "src": "1294:22:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1748,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1294:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1751,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "tokenAddress",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1753,
                                    "src": "1326:20:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1750,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1326:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1256:96:14"
                        },
                        "src": "1244:109:14"
                    },
                    {
                        "constant": false,
                        "id": 1755,
                        "mutability": "mutable",
                        "name": "_poolRewardBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 2115,
                        "src": "1422:32:14",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1754,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1422:7:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1757,
                        "mutability": "mutable",
                        "name": "_platformRewardBips",
                        "nodeType": "VariableDeclaration",
                        "scope": 2115,
                        "src": "1528:36:14",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1756,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1528:7:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1759,
                        "mutability": "mutable",
                        "name": "_platformVaultAddress",
                        "nodeType": "VariableDeclaration",
                        "scope": 2115,
                        "src": "1637:38:14",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1758,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1637:7:14",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1761,
                        "mutability": "mutable",
                        "name": "_currentSender",
                        "nodeType": "VariableDeclaration",
                        "scope": 2115,
                        "src": "1741:31:14",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                        },
                        "typeName": {
                            "id": 1760,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1741:7:14",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1763,
                        "mutability": "mutable",
                        "name": "_currentTokenAmount",
                        "nodeType": "VariableDeclaration",
                        "scope": 2115,
                        "src": "1838:36:14",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1762,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1838:7:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "constant": false,
                        "id": 1765,
                        "mutability": "mutable",
                        "name": "_currentExpectedBalance",
                        "nodeType": "VariableDeclaration",
                        "scope": 2115,
                        "src": "1959:40:14",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 1764,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1959:7:14",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1768,
                            "nodeType": "Block",
                            "src": "2020:2:14",
                            "statements": []
                        },
                        "id": 1769,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1766,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2017:2:14"
                        },
                        "returnParameters": {
                            "id": 1767,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2020:0:14"
                        },
                        "scope": 2115,
                        "src": "2006:16:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1879,
                            "nodeType": "Block",
                            "src": "2189:1633:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 1788,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 1783,
                                                    "name": "invokeTo",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1771,
                                                    "src": "2220:8:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "id": 1786,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -28,
                                                            "src": "2240:4:14",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_KToken_$2115",
                                                                "typeString": "contract KToken"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_KToken_$2115",
                                                                "typeString": "contract KToken"
                                                            }
                                                        ],
                                                        "id": 1785,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "2232:7:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 1784,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2232:7:14",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 1787,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2232:13:14",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "src": "2220:25:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4b546f6b656e3a2063616e6e6f7420696e766f6b65207468697320636f6e7472616374",
                                                "id": 1789,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2259:37:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_3d841e9495eb9aca67b9c767c4a03783461f65ceccd89be732f7fa54f6a79acd",
                                                    "typeString": "literal_string \"KToken: cannot invoke this contract\""
                                                },
                                                "value": "KToken: cannot invoke this contract"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_3d841e9495eb9aca67b9c767c4a03783461f65ceccd89be732f7fa54f6a79acd",
                                                    "typeString": "literal_string \"KToken: cannot invoke this contract\""
                                                }
                                            ],
                                            "id": 1782,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2199:7:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1790,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2199:107:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1791,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2199:107:14"
                                },
                                {
                                    "assignments": [
                                        1793
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1793,
                                            "mutability": "mutable",
                                            "name": "startingBalance",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1879,
                                            "src": "2375:23:14",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1792,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2375:7:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1800,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 1797,
                                                    "name": "payableReserveAdjustment",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1888,
                                                    "src": "2433:24:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 1798,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2433:26:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 1794,
                                                    "name": "totalReserve",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5174,
                                                    "src": "2401:12:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 1795,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2401:14:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1796,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sub",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5434,
                                            "src": "2401:18:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1799,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2401:68:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2375:94:14"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "expression": {
                                                    "id": 1802,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "2511:3:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 1803,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "2511:10:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 1804,
                                                "name": "underlyingAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1775,
                                                "src": "2535:16:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1806,
                                                        "name": "startingBalance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1793,
                                                        "src": "2590:15:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "id": 1807,
                                                        "name": "underlyingAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1775,
                                                        "src": "2607:16:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1805,
                                                    "name": "calculateExpectedBalance",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1964,
                                                    "src": "2565:24:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) view returns (uint256)"
                                                    }
                                                },
                                                "id": 1808,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2565:59:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1801,
                                            "name": "setInvocationState",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1910,
                                            "src": "2479:18:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256,uint256)"
                                            }
                                        },
                                        "id": 1809,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2479:155:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1810,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2479:155:14"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1813,
                                                        "name": "invokeTo",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1771,
                                                        "src": "2777:8:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 1814,
                                                        "name": "underlyingAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1775,
                                                        "src": "2787:16:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1812,
                                                    "name": "transferUnderlying",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5080,
                                                    "src": "2758:18:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                        "typeString": "function (address,uint256) returns (bool)"
                                                    }
                                                },
                                                "id": 1815,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2758:46:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74",
                                                "id": 1816,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2818:46:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_9a876903edbe61c9c9bb19657e7f4f284ed0b2ad443be8d0a136778f9de7160d",
                                                    "typeString": "literal_string \"KToken: unable to transfer invocation amount\""
                                                },
                                                "value": "KToken: unable to transfer invocation amount"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_9a876903edbe61c9c9bb19657e7f4f284ed0b2ad443be8d0a136778f9de7160d",
                                                    "typeString": "literal_string \"KToken: unable to transfer invocation amount\""
                                                }
                                            ],
                                            "id": 1811,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "2737:7:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1817,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2737:137:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1818,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2737:137:14"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 1826,
                                                "name": "invokeData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1773,
                                                "src": "2971:10:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                    }
                                                ],
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 1820,
                                                            "name": "invokeTo",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1771,
                                                            "src": "2935:8:14",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 1819,
                                                        "name": "IInvokable",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1178,
                                                        "src": "2924:10:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_IInvokable_$1178_$",
                                                            "typeString": "type(contract IInvokable)"
                                                        }
                                                    },
                                                    "id": 1821,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2924:20:14",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IInvokable_$1178",
                                                        "typeString": "contract IInvokable"
                                                    }
                                                },
                                                "id": 1822,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "execute",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 1177,
                                                "src": "2924:28:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$__$",
                                                    "typeString": "function (bytes memory) payable external"
                                                }
                                            },
                                            "id": 1825,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "expression": {
                                                        "id": 1823,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "2960:3:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 1824,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "src": "2960:9:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "2924:46:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_payable$_t_bytes_memory_ptr_$returns$__$value",
                                                "typeString": "function (bytes memory) payable external"
                                            }
                                        },
                                        "id": 1827,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2924:58:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1828,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2924:58:14"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 1830,
                                                "name": "invokeTo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1771,
                                                "src": "3021:8:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 1831,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "3043:3:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                    }
                                                },
                                                "id": 1832,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "value",
                                                "nodeType": "MemberAccess",
                                                "src": "3043:9:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1834,
                                                        "name": "invokeData",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1773,
                                                        "src": "3076:10:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                        }
                                                    ],
                                                    "id": 1833,
                                                    "name": "keccak256",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -8,
                                                    "src": "3066:9:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                                    }
                                                },
                                                "id": 1835,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3066:21:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 1836,
                                                "name": "underlyingAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1775,
                                                "src": "3101:16:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1829,
                                            "name": "Invocation",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1745,
                                            "src": "2997:10:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256,bytes32,uint256)"
                                            }
                                        },
                                        "id": 1837,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2997:130:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1838,
                                    "nodeType": "EmitStatement",
                                    "src": "2992:135:14"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 1843,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "arguments": [],
                                                    "expression": {
                                                        "argumentTypes": [],
                                                        "id": 1840,
                                                        "name": "totalReserve",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5174,
                                                        "src": "3221:12:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                            "typeString": "function () view returns (uint256)"
                                                        }
                                                    },
                                                    "id": 1841,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3221:14:14",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "id": 1842,
                                                    "name": "_currentExpectedBalance",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1765,
                                                    "src": "3239:23:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "src": "3221:41:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4b546f6b656e3a20696e636f727265637420656e64696e672062616c616e6365",
                                                "id": 1844,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3276:34:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0992a0a38e0987f3f154612fd783c1937b8b2184454595eb3eee36f99858ff3b",
                                                    "typeString": "literal_string \"KToken: incorrect ending balance\""
                                                },
                                                "value": "KToken: incorrect ending balance"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0992a0a38e0987f3f154612fd783c1937b8b2184454595eb3eee36f99858ff3b",
                                                    "typeString": "literal_string \"KToken: incorrect ending balance\""
                                                }
                                            ],
                                            "id": 1839,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3200:7:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1845,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3200:120:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1846,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3200:120:14"
                                },
                                {
                                    "assignments": [
                                        1848
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 1848,
                                            "mutability": "mutable",
                                            "name": "platformReward",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 1879,
                                            "src": "3369:22:14",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 1847,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3369:7:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 1852,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 1850,
                                                "name": "underlyingAmount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1775,
                                                "src": "3418:16:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 1849,
                                            "name": "calculatePlatformReward",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1942,
                                            "src": "3394:23:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                "typeString": "function (uint256) view returns (uint256)"
                                            }
                                        },
                                        "id": 1851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3394:41:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3369:66:14"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1855,
                                                        "name": "_platformVaultAddress",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1759,
                                                        "src": "3486:21:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    {
                                                        "id": 1856,
                                                        "name": "platformReward",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1848,
                                                        "src": "3509:14:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1854,
                                                    "name": "transferUnderlying",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5080,
                                                    "src": "3467:18:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                                        "typeString": "function (address,uint256) returns (bool)"
                                                    }
                                                },
                                                "id": 1857,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3467:57:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264",
                                                "id": 1858,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3538:44:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_bf7cd392b81f131d7dd401c8cb1824a8d9e742896f54853b90886c17ebc8d33c",
                                                    "typeString": "literal_string \"KToken: unable to transfer platform reward\""
                                                },
                                                "value": "KToken: unable to transfer platform reward"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_bf7cd392b81f131d7dd401c8cb1824a8d9e742896f54853b90886c17ebc8d33c",
                                                    "typeString": "literal_string \"KToken: unable to transfer platform reward\""
                                                }
                                            ],
                                            "id": 1853,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "3446:7:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 1859,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3446:146:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1860,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3446:146:14"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1863,
                                                        "name": "underlyingAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1775,
                                                        "src": "3647:16:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1862,
                                                    "name": "calculatePoolReward",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1926,
                                                    "src": "3627:19:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256) view returns (uint256)"
                                                    }
                                                },
                                                "id": 1864,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3627:37:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "id": 1865,
                                                "name": "platformReward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1848,
                                                "src": "3678:14:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 1866,
                                                    "name": "underlying",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5196,
                                                    "src": "3706:10:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                                        "typeString": "function () view returns (address)"
                                                    }
                                                },
                                                "id": 1867,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3706:12:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            ],
                                            "id": 1861,
                                            "name": "Reward",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1753,
                                            "src": "3607:6:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                                                "typeString": "function (uint256,uint256,address)"
                                            }
                                        },
                                        "id": 1868,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3607:121:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1869,
                                    "nodeType": "EmitStatement",
                                    "src": "3602:126:14"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 1873,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "3806:1:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 1872,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "3798:7:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 1871,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3798:7:14",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 1874,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3798:10:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "hexValue": "30",
                                                "id": 1875,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3810:1:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            },
                                            {
                                                "hexValue": "30",
                                                "id": 1876,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "3813:1:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                },
                                                {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                }
                                            ],
                                            "id": 1870,
                                            "name": "setInvocationState",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1910,
                                            "src": "3779:18:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,uint256,uint256)"
                                            }
                                        },
                                        "id": 1877,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3779:36:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 1878,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3779:36:14"
                                }
                            ]
                        },
                        "functionSelector": "9e976db1",
                        "id": 1880,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 1778,
                                "modifierName": {
                                    "id": 1777,
                                    "name": "nonReentrant",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6294,
                                    "src": "2162:12:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "2162:12:14"
                            },
                            {
                                "id": 1780,
                                "modifierName": {
                                    "id": 1779,
                                    "name": "whenNotPaused",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6212,
                                    "src": "2175:13:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "2175:13:14"
                            }
                        ],
                        "name": "invoke",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1776,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1771,
                                    "mutability": "mutable",
                                    "name": "invokeTo",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1880,
                                    "src": "2053:16:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1770,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2053:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1773,
                                    "mutability": "mutable",
                                    "name": "invokeData",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1880,
                                    "src": "2079:25:14",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 1772,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2079:5:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1775,
                                    "mutability": "mutable",
                                    "name": "underlyingAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1880,
                                    "src": "2114:24:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1774,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2114:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2043:101:14"
                        },
                        "returnParameters": {
                            "id": 1781,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2189:0:14"
                        },
                        "scope": 2115,
                        "src": "2028:1794:14",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 1887,
                            "nodeType": "Block",
                            "src": "3940:25:14",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "30",
                                        "id": 1885,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3957:1:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                    },
                                    "functionReturnParameters": 1884,
                                    "id": 1886,
                                    "nodeType": "Return",
                                    "src": "3950:8:14"
                                }
                            ]
                        },
                        "id": 1888,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "payableReserveAdjustment",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1881,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3861:2:14"
                        },
                        "returnParameters": {
                            "id": 1884,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1883,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1888,
                                    "src": "3927:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1882,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3927:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3926:9:14"
                        },
                        "scope": 2115,
                        "src": "3828:137:14",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1909,
                            "nodeType": "Block",
                            "src": "4121:155:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1899,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1897,
                                            "name": "_currentSender",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1761,
                                            "src": "4131:14:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1898,
                                            "name": "currentSender",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1890,
                                            "src": "4148:13:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "4131:30:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 1900,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4131:30:14"
                                },
                                {
                                    "expression": {
                                        "id": 1903,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1901,
                                            "name": "_currentTokenAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1763,
                                            "src": "4171:19:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1902,
                                            "name": "currentTokenAmount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1892,
                                            "src": "4193:18:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4171:40:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1904,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4171:40:14"
                                },
                                {
                                    "expression": {
                                        "id": 1907,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 1905,
                                            "name": "_currentExpectedBalance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1765,
                                            "src": "4221:23:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 1906,
                                            "name": "currentExpectedBalance",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1894,
                                            "src": "4247:22:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "4221:48:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 1908,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4221:48:14"
                                }
                            ]
                        },
                        "id": 1910,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setInvocationState",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1895,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1890,
                                    "mutability": "mutable",
                                    "name": "currentSender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1910,
                                    "src": "4008:21:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 1889,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4008:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1892,
                                    "mutability": "mutable",
                                    "name": "currentTokenAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1910,
                                    "src": "4039:26:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1891,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4039:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1894,
                                    "mutability": "mutable",
                                    "name": "currentExpectedBalance",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1910,
                                    "src": "4075:30:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1893,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4075:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3998:113:14"
                        },
                        "returnParameters": {
                            "id": 1896,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4121:0:14"
                        },
                        "scope": 2115,
                        "src": "3971:305:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1925,
                            "nodeType": "Block",
                            "src": "4392:67:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "3130303030",
                                                "id": 1922,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4446:5:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                    "typeString": "int_const 10000"
                                                },
                                                "value": "10000"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                    "typeString": "int_const 10000"
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 1919,
                                                        "name": "_poolRewardBips",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1755,
                                                        "src": "4425:15:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 1917,
                                                        "name": "tokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1912,
                                                        "src": "4409:11:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 1918,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "mul",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5497,
                                                    "src": "4409:15:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 1920,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4409:32:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1921,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "div",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5514,
                                            "src": "4409:36:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1923,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4409:43:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1916,
                                    "id": 1924,
                                    "nodeType": "Return",
                                    "src": "4402:50:14"
                                }
                            ]
                        },
                        "id": 1926,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculatePoolReward",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1913,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1912,
                                    "mutability": "mutable",
                                    "name": "tokenAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1926,
                                    "src": "4311:19:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1911,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4311:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4310:21:14"
                        },
                        "returnParameters": {
                            "id": 1916,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1915,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1926,
                                    "src": "4379:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1914,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4379:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4378:9:14"
                        },
                        "scope": 2115,
                        "src": "4282:177:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1941,
                            "nodeType": "Block",
                            "src": "4579:71:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "hexValue": "3130303030",
                                                "id": 1938,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4637:5:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                    "typeString": "int_const 10000"
                                                },
                                                "value": "10000"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                    "typeString": "int_const 10000"
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "id": 1935,
                                                        "name": "_platformRewardBips",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1757,
                                                        "src": "4612:19:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 1933,
                                                        "name": "tokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1928,
                                                        "src": "4596:11:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 1934,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "mul",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5497,
                                                    "src": "4596:15:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 1936,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4596:36:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1937,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "div",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5514,
                                            "src": "4596:40:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1939,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4596:47:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1932,
                                    "id": 1940,
                                    "nodeType": "Return",
                                    "src": "4589:54:14"
                                }
                            ]
                        },
                        "id": 1942,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculatePlatformReward",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1929,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1928,
                                    "mutability": "mutable",
                                    "name": "tokenAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1942,
                                    "src": "4498:19:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1927,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4498:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4497:21:14"
                        },
                        "returnParameters": {
                            "id": 1932,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1931,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1942,
                                    "src": "4566:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1930,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4566:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4565:9:14"
                        },
                        "scope": 2115,
                        "src": "4465:185:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1963,
                            "nodeType": "Block",
                            "src": "4790:161:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1959,
                                                        "name": "tokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1946,
                                                        "src": "4918:11:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1958,
                                                    "name": "calculatePlatformReward",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1942,
                                                    "src": "4894:23:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256) view returns (uint256)"
                                                    }
                                                },
                                                "id": 1960,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4894:36:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 1954,
                                                                "name": "tokenAmount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1946,
                                                                "src": "4859:11:14",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "id": 1953,
                                                            "name": "calculatePoolReward",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1926,
                                                            "src": "4839:19:14",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                                "typeString": "function (uint256) view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 1955,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4839:32:14",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 1951,
                                                        "name": "startingBalance",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1944,
                                                        "src": "4819:15:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 1952,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "add",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5417,
                                                    "src": "4819:19:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 1956,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4819:53:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1957,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "add",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5417,
                                            "src": "4819:57:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1961,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4819:125:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1950,
                                    "id": 1962,
                                    "nodeType": "Return",
                                    "src": "4800:144:14"
                                }
                            ]
                        },
                        "id": 1964,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateExpectedBalance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1947,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1944,
                                    "mutability": "mutable",
                                    "name": "startingBalance",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1964,
                                    "src": "4699:23:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1943,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4699:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 1946,
                                    "mutability": "mutable",
                                    "name": "tokenAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1964,
                                    "src": "4732:19:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1945,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4732:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4689:68:14"
                        },
                        "returnParameters": {
                            "id": 1950,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1949,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1964,
                                    "src": "4781:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1948,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4781:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4780:9:14"
                        },
                        "scope": 2115,
                        "src": "4656:295:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 1983,
                            "nodeType": "Block",
                            "src": "5072:157:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 1979,
                                                        "name": "tokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1966,
                                                        "src": "5196:11:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "id": 1978,
                                                    "name": "calculatePlatformReward",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1942,
                                                    "src": "5172:23:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                        "typeString": "function (uint256) view returns (uint256)"
                                                    }
                                                },
                                                "id": 1980,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5172:36:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "arguments": [
                                                    {
                                                        "arguments": [
                                                            {
                                                                "id": 1974,
                                                                "name": "tokenAmount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1966,
                                                                "src": "5137:11:14",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "id": 1973,
                                                            "name": "calculatePoolReward",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 1926,
                                                            "src": "5117:19:14",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                                "typeString": "function (uint256) view returns (uint256)"
                                                            }
                                                        },
                                                        "id": 1975,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "5117:32:14",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 1971,
                                                        "name": "tokenAmount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 1966,
                                                        "src": "5101:11:14",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 1972,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "add",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5417,
                                                    "src": "5101:15:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 1976,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5101:49:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 1977,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "add",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5417,
                                            "src": "5101:53:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 1981,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5101:121:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1970,
                                    "id": 1982,
                                    "nodeType": "Return",
                                    "src": "5082:140:14"
                                }
                            ]
                        },
                        "functionSelector": "b1197239",
                        "id": 1984,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "calculateRepaymentAmount",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1967,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1966,
                                    "mutability": "mutable",
                                    "name": "tokenAmount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1984,
                                    "src": "4991:19:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1965,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4991:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4990:21:14"
                        },
                        "returnParameters": {
                            "id": 1970,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1969,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1984,
                                    "src": "5059:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1968,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5059:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5058:9:14"
                        },
                        "scope": 2115,
                        "src": "4957:272:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 1991,
                            "nodeType": "Block",
                            "src": "5289:39:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1989,
                                        "name": "_poolRewardBips",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1755,
                                        "src": "5306:15:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1988,
                                    "id": 1990,
                                    "nodeType": "Return",
                                    "src": "5299:22:14"
                                }
                            ]
                        },
                        "functionSelector": "fef10b95",
                        "id": 1992,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "poolReward",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1985,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5254:2:14"
                        },
                        "returnParameters": {
                            "id": 1988,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1987,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 1992,
                                    "src": "5280:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1986,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5280:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5279:9:14"
                        },
                        "scope": 2115,
                        "src": "5235:93:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 1999,
                            "nodeType": "Block",
                            "src": "5392:43:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 1997,
                                        "name": "_platformRewardBips",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1757,
                                        "src": "5409:19:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 1996,
                                    "id": 1998,
                                    "nodeType": "Return",
                                    "src": "5402:26:14"
                                }
                            ]
                        },
                        "functionSelector": "fe6551b6",
                        "id": 2000,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "platformReward",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 1993,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5357:2:14"
                        },
                        "returnParameters": {
                            "id": 1996,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 1995,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2000,
                                    "src": "5383:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 1994,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5383:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5382:9:14"
                        },
                        "scope": 2115,
                        "src": "5334:101:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2007,
                            "nodeType": "Block",
                            "src": "5505:45:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2005,
                                        "name": "_platformVaultAddress",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1759,
                                        "src": "5522:21:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 2004,
                                    "id": 2006,
                                    "nodeType": "Return",
                                    "src": "5515:28:14"
                                }
                            ]
                        },
                        "functionSelector": "5f39e93a",
                        "id": 2008,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "platformVaultAddress",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2001,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5470:2:14"
                        },
                        "returnParameters": {
                            "id": 2004,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2003,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2008,
                                    "src": "5496:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2002,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5496:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5495:9:14"
                        },
                        "scope": 2115,
                        "src": "5441:109:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2015,
                            "nodeType": "Block",
                            "src": "5605:28:14",
                            "statements": [
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 2013,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5622:4:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 2012,
                                    "id": 2014,
                                    "nodeType": "Return",
                                    "src": "5615:11:14"
                                }
                            ]
                        },
                        "functionSelector": "29d9109c",
                        "id": 2016,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isKToken",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2009,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5573:2:14"
                        },
                        "returnParameters": {
                            "id": 2012,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2011,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2016,
                                    "src": "5599:4:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 2010,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5599:4:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5598:6:14"
                        },
                        "scope": 2115,
                        "src": "5556:77:14",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            1154
                        ],
                        "body": {
                            "id": 2024,
                            "nodeType": "Block",
                            "src": "5751:38:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2022,
                                        "name": "_currentSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1761,
                                        "src": "5768:14:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 2021,
                                    "id": 2023,
                                    "nodeType": "Return",
                                    "src": "5761:21:14"
                                }
                            ]
                        },
                        "functionSelector": "70348f3e",
                        "id": 2025,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "currentSender",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2018,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5724:8:14"
                        },
                        "parameters": {
                            "id": 2017,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5707:2:14"
                        },
                        "returnParameters": {
                            "id": 2021,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2020,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2025,
                                    "src": "5742:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2019,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5742:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5741:9:14"
                        },
                        "scope": 2115,
                        "src": "5685:104:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            1159
                        ],
                        "body": {
                            "id": 2033,
                            "nodeType": "Block",
                            "src": "5867:35:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2031,
                                        "name": "_underlying",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4927,
                                        "src": "5884:11:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 2030,
                                    "id": 2032,
                                    "nodeType": "Return",
                                    "src": "5877:18:14"
                                }
                            ]
                        },
                        "functionSelector": "11eefd5d",
                        "id": 2034,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "currentTokenAddress",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2027,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5840:8:14"
                        },
                        "parameters": {
                            "id": 2026,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5823:2:14"
                        },
                        "returnParameters": {
                            "id": 2030,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2029,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2034,
                                    "src": "5858:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2028,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5858:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5857:9:14"
                        },
                        "scope": 2115,
                        "src": "5795:107:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            1164
                        ],
                        "body": {
                            "id": 2042,
                            "nodeType": "Block",
                            "src": "5979:43:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2040,
                                        "name": "_currentTokenAmount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1763,
                                        "src": "5996:19:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 2039,
                                    "id": 2041,
                                    "nodeType": "Return",
                                    "src": "5989:26:14"
                                }
                            ]
                        },
                        "functionSelector": "ff69ac36",
                        "id": 2043,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "currentTokenAmount",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2036,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "5952:8:14"
                        },
                        "parameters": {
                            "id": 2035,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5935:2:14"
                        },
                        "returnParameters": {
                            "id": 2039,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2038,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2043,
                                    "src": "5970:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2037,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5970:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5969:9:14"
                        },
                        "scope": 2115,
                        "src": "5908:114:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            1169
                        ],
                        "body": {
                            "id": 2055,
                            "nodeType": "Block",
                            "src": "6103:67:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 2051,
                                                    "name": "totalReserve",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5174,
                                                    "src": "6148:12:14",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                        "typeString": "function () view returns (uint256)"
                                                    }
                                                },
                                                "id": 2052,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6148:14:14",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "expression": {
                                                "id": 2049,
                                                "name": "_currentExpectedBalance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1765,
                                                "src": "6120:23:14",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "id": 2050,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "sub",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 5434,
                                            "src": "6120:27:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                            }
                                        },
                                        "id": 2053,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6120:43:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 2048,
                                    "id": 2054,
                                    "nodeType": "Return",
                                    "src": "6113:50:14"
                                }
                            ]
                        },
                        "functionSelector": "6f27e9d8",
                        "id": 2056,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "currentRepaymentAmount",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 2045,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "6076:8:14"
                        },
                        "parameters": {
                            "id": 2044,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6059:2:14"
                        },
                        "returnParameters": {
                            "id": 2048,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2047,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2056,
                                    "src": "6094:7:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2046,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6094:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6093:9:14"
                        },
                        "scope": 2115,
                        "src": "6028:142:14",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2067,
                            "nodeType": "Block",
                            "src": "6269:49:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2065,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 2063,
                                            "name": "_poolRewardBips",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1755,
                                            "src": "6279:15:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 2064,
                                            "name": "poolRewardBips",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2058,
                                            "src": "6297:14:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6279:32:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2066,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6279:32:14"
                                }
                            ]
                        },
                        "functionSelector": "046e7913",
                        "id": 2068,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 2061,
                                "modifierName": {
                                    "id": 2060,
                                    "name": "onlyOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5337,
                                    "src": "6259:9:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6259:9:14"
                            }
                        ],
                        "name": "setPoolReward",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2059,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2058,
                                    "mutability": "mutable",
                                    "name": "poolRewardBips",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2068,
                                    "src": "6226:22:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2057,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6226:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6225:24:14"
                        },
                        "returnParameters": {
                            "id": 2062,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6269:0:14"
                        },
                        "scope": 2115,
                        "src": "6203:115:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2079,
                            "nodeType": "Block",
                            "src": "6398:57:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2077,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 2075,
                                            "name": "_platformRewardBips",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1757,
                                            "src": "6408:19:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 2076,
                                            "name": "platformRewardBips",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2070,
                                            "src": "6430:18:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "6408:40:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 2078,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6408:40:14"
                                }
                            ]
                        },
                        "functionSelector": "f35a37aa",
                        "id": 2080,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 2073,
                                "modifierName": {
                                    "id": 2072,
                                    "name": "onlyOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5337,
                                    "src": "6388:9:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6388:9:14"
                            }
                        ],
                        "name": "setPlatformReward",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2071,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2070,
                                    "mutability": "mutable",
                                    "name": "platformRewardBips",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2080,
                                    "src": "6351:26:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 2069,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6351:7:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6350:28:14"
                        },
                        "returnParameters": {
                            "id": 2074,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6398:0:14"
                        },
                        "scope": 2115,
                        "src": "6324:131:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2091,
                            "nodeType": "Block",
                            "src": "6566:64:14",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 2089,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 2087,
                                            "name": "_platformVaultAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1759,
                                            "src": "6576:21:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 2088,
                                            "name": "newPlatformVaultAddress",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2082,
                                            "src": "6600:23:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "6576:47:14",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "id": 2090,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6576:47:14"
                                }
                            ]
                        },
                        "functionSelector": "b2551589",
                        "id": 2092,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 2085,
                                "modifierName": {
                                    "id": 2084,
                                    "name": "onlyOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5337,
                                    "src": "6552:9:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6552:9:14"
                            }
                        ],
                        "name": "setPlatformVaultAddress",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2083,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 2082,
                                    "mutability": "mutable",
                                    "name": "newPlatformVaultAddress",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2092,
                                    "src": "6494:31:14",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 2081,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6494:7:14",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6493:33:14"
                        },
                        "returnParameters": {
                            "id": 2086,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6566:0:14"
                        },
                        "scope": 2115,
                        "src": "6461:169:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2102,
                            "nodeType": "Block",
                            "src": "6686:25:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 2099,
                                            "name": "_pause",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6238,
                                            "src": "6696:6:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 2100,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6696:8:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2101,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6696:8:14"
                                }
                            ]
                        },
                        "functionSelector": "8456cb59",
                        "id": 2103,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 2095,
                                "modifierName": {
                                    "id": 2094,
                                    "name": "onlyOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5337,
                                    "src": "6662:9:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6662:9:14"
                            },
                            {
                                "id": 2097,
                                "modifierName": {
                                    "id": 2096,
                                    "name": "whenNotPaused",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6212,
                                    "src": "6672:13:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6672:13:14"
                            }
                        ],
                        "name": "pause",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2093,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6650:2:14"
                        },
                        "returnParameters": {
                            "id": 2098,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6686:0:14"
                        },
                        "scope": 2115,
                        "src": "6636:75:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 2113,
                            "nodeType": "Block",
                            "src": "6766:27:14",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 2110,
                                            "name": "_unpause",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6254,
                                            "src": "6776:8:14",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 2111,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6776:10:14",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 2112,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6776:10:14"
                                }
                            ]
                        },
                        "functionSelector": "3f4ba83a",
                        "id": 2114,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [
                            {
                                "id": 2106,
                                "modifierName": {
                                    "id": 2105,
                                    "name": "onlyOwner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5337,
                                    "src": "6745:9:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6745:9:14"
                            },
                            {
                                "id": 2108,
                                "modifierName": {
                                    "id": 2107,
                                    "name": "whenPaused",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6222,
                                    "src": "6755:10:14",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_modifier$__$",
                                        "typeString": "modifier ()"
                                    }
                                },
                                "nodeType": "ModifierInvocation",
                                "src": "6755:10:14"
                            }
                        ],
                        "name": "unpause",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 2104,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6733:2:14"
                        },
                        "returnParameters": {
                            "id": 2109,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6766:0:14"
                        },
                        "scope": 2115,
                        "src": "6717:76:14",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 2116,
                "src": "956:5839:14"
            }
        ],
        "src": "640:6156:14"
    },
    "legacyAST": {
        "attributes": {
            "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/ktoken/KToken.sol",
            "exportedSymbols": {
                "CollateralizedToken": [
                    5197
                ],
                "Context": [
                    5279
                ],
                "ERC20": [
                    6087
                ],
                "ExtendedMath": [
                    1506
                ],
                "IERC20": [
                    6165
                ],
                "IInvocationHook": [
                    1170
                ],
                "IInvokable": [
                    1178
                ],
                "KToken": [
                    2115
                ],
                "Ownable": [
                    5388
                ],
                "Pausable": [
                    6255
                ],
                "ReentrancyGuard": [
                    6295
                ],
                "SafeMath": [
                    5584
                ],
                "UnlimitedApprovalErc20": [
                    5256
                ]
            },
            "license": "Apache-2.0"
        },
        "children": [
            {
                "attributes": {
                    "literals": [
                        "solidity",
                        "^",
                        "0.7",
                        ".0"
                    ]
                },
                "id": 1718,
                "name": "PragmaDirective",
                "src": "640:23:14"
            },
            {
                "attributes": {
                    "SourceUnit": 5585,
                    "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                    "file": "@openzeppelin/contracts/math/SafeMath.sol",
                    "scope": 2116,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 1719,
                "name": "ImportDirective",
                "src": "665:51:14"
            },
            {
                "attributes": {
                    "SourceUnit": 5389,
                    "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
                    "file": "@openzeppelin/contracts/access/Ownable.sol",
                    "scope": 2116,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 1720,
                "name": "ImportDirective",
                "src": "717:52:14"
            },
            {
                "attributes": {
                    "SourceUnit": 6256,
                    "absolutePath": "@openzeppelin/contracts/utils/Pausable.sol",
                    "file": "@openzeppelin/contracts/utils/Pausable.sol",
                    "scope": 2116,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 1721,
                "name": "ImportDirective",
                "src": "770:52:14"
            },
            {
                "attributes": {
                    "SourceUnit": 5198,
                    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/token/CollateralizedToken.sol",
                    "file": "../token/CollateralizedToken.sol",
                    "scope": 2116,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 1722,
                "name": "ImportDirective",
                "src": "823:42:14"
            },
            {
                "attributes": {
                    "SourceUnit": 1171,
                    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvocationHook.sol",
                    "file": "../common/invoke/IInvocationHook.sol",
                    "scope": 2116,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 1723,
                "name": "ImportDirective",
                "src": "866:46:14"
            },
            {
                "attributes": {
                    "SourceUnit": 1179,
                    "absolutePath": "/Users/andrekorol/src/kollateral/protocol/contracts/common/invoke/IInvokable.sol",
                    "file": "../common/invoke/IInvokable.sol",
                    "scope": 2116,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 1724,
                "name": "ImportDirective",
                "src": "913:41:14"
            },
            {
                "attributes": {
                    "abstract": true,
                    "contractDependencies": [
                        1170,
                        1506,
                        5197,
                        5256,
                        5279,
                        5388,
                        6087,
                        6165,
                        6255,
                        6295
                    ],
                    "contractKind": "contract",
                    "fullyImplemented": false,
                    "linearizedBaseContracts": [
                        2115,
                        6255,
                        5388,
                        5197,
                        1506,
                        6295,
                        5256,
                        6087,
                        6165,
                        5279,
                        1170
                    ],
                    "name": "KToken",
                    "scope": 2116
                },
                "children": [
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "IInvocationHook",
                                    "referencedDeclaration": 1170,
                                    "type": "contract IInvocationHook"
                                },
                                "id": 1725,
                                "name": "UserDefinedTypeName",
                                "src": "988:15:14"
                            }
                        ],
                        "id": 1726,
                        "name": "InheritanceSpecifier",
                        "src": "988:15:14"
                    },
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "CollateralizedToken",
                                    "referencedDeclaration": 5197,
                                    "type": "contract CollateralizedToken"
                                },
                                "id": 1727,
                                "name": "UserDefinedTypeName",
                                "src": "1009:19:14"
                            }
                        ],
                        "id": 1728,
                        "name": "InheritanceSpecifier",
                        "src": "1009:19:14"
                    },
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "Ownable",
                                    "referencedDeclaration": 5388,
                                    "type": "contract Ownable"
                                },
                                "id": 1729,
                                "name": "UserDefinedTypeName",
                                "src": "1034:7:14"
                            }
                        ],
                        "id": 1730,
                        "name": "InheritanceSpecifier",
                        "src": "1034:7:14"
                    },
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "Pausable",
                                    "referencedDeclaration": 6255,
                                    "type": "contract Pausable"
                                },
                                "id": 1731,
                                "name": "UserDefinedTypeName",
                                "src": "1047:8:14"
                            }
                        ],
                        "id": 1732,
                        "name": "InheritanceSpecifier",
                        "src": "1047:8:14"
                    },
                    {
                        "children": [
                            {
                                "attributes": {
                                    "name": "SafeMath",
                                    "referencedDeclaration": 5584,
                                    "type": "library SafeMath"
                                },
                                "id": 1733,
                                "name": "UserDefinedTypeName",
                                "src": "1068:8:14"
                            },
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 1734,
                                "name": "ElementaryTypeName",
                                "src": "1081:7:14"
                            }
                        ],
                        "id": 1735,
                        "name": "UsingForDirective",
                        "src": "1062:27:14"
                    },
                    {
                        "attributes": {
                            "anonymous": false,
                            "name": "Invocation"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "invokeTo",
                                            "scope": 1745,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 1736,
                                                "name": "ElementaryTypeName",
                                                "src": "1121:7:14"
                                            }
                                        ],
                                        "id": 1737,
                                        "name": "VariableDeclaration",
                                        "src": "1121:16:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "invokeValue",
                                            "scope": 1745,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1738,
                                                "name": "ElementaryTypeName",
                                                "src": "1147:7:14"
                                            }
                                        ],
                                        "id": 1739,
                                        "name": "VariableDeclaration",
                                        "src": "1147:19:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "invokeDataHash",
                                            "scope": 1745,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bytes32",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bytes32",
                                                    "type": "bytes32"
                                                },
                                                "id": 1740,
                                                "name": "ElementaryTypeName",
                                                "src": "1176:7:14"
                                            }
                                        ],
                                        "id": 1741,
                                        "name": "VariableDeclaration",
                                        "src": "1176:22:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "underlyingAmount",
                                            "scope": 1745,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1742,
                                                "name": "ElementaryTypeName",
                                                "src": "1208:7:14"
                                            }
                                        ],
                                        "id": 1743,
                                        "name": "VariableDeclaration",
                                        "src": "1208:24:14"
                                    }
                                ],
                                "id": 1744,
                                "name": "ParameterList",
                                "src": "1111:127:14"
                            }
                        ],
                        "id": 1745,
                        "name": "EventDefinition",
                        "src": "1095:144:14"
                    },
                    {
                        "attributes": {
                            "anonymous": false,
                            "name": "Reward"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "poolReward",
                                            "scope": 1753,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1746,
                                                "name": "ElementaryTypeName",
                                                "src": "1266:7:14"
                                            }
                                        ],
                                        "id": 1747,
                                        "name": "VariableDeclaration",
                                        "src": "1266:18:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "platformReward",
                                            "scope": 1753,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1748,
                                                "name": "ElementaryTypeName",
                                                "src": "1294:7:14"
                                            }
                                        ],
                                        "id": 1749,
                                        "name": "VariableDeclaration",
                                        "src": "1294:22:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "indexed": false,
                                            "mutability": "mutable",
                                            "name": "tokenAddress",
                                            "scope": 1753,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 1750,
                                                "name": "ElementaryTypeName",
                                                "src": "1326:7:14"
                                            }
                                        ],
                                        "id": 1751,
                                        "name": "VariableDeclaration",
                                        "src": "1326:20:14"
                                    }
                                ],
                                "id": 1752,
                                "name": "ParameterList",
                                "src": "1256:96:14"
                            }
                        ],
                        "id": 1753,
                        "name": "EventDefinition",
                        "src": "1244:109:14"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_poolRewardBips",
                            "scope": 2115,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "uint256",
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 1754,
                                "name": "ElementaryTypeName",
                                "src": "1422:7:14"
                            }
                        ],
                        "id": 1755,
                        "name": "VariableDeclaration",
                        "src": "1422:32:14"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_platformRewardBips",
                            "scope": 2115,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "uint256",
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 1756,
                                "name": "ElementaryTypeName",
                                "src": "1528:7:14"
                            }
                        ],
                        "id": 1757,
                        "name": "VariableDeclaration",
                        "src": "1528:36:14"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_platformVaultAddress",
                            "scope": 2115,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "address",
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "address",
                                    "stateMutability": "nonpayable",
                                    "type": "address"
                                },
                                "id": 1758,
                                "name": "ElementaryTypeName",
                                "src": "1637:7:14"
                            }
                        ],
                        "id": 1759,
                        "name": "VariableDeclaration",
                        "src": "1637:38:14"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_currentSender",
                            "scope": 2115,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "address",
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "address",
                                    "stateMutability": "nonpayable",
                                    "type": "address"
                                },
                                "id": 1760,
                                "name": "ElementaryTypeName",
                                "src": "1741:7:14"
                            }
                        ],
                        "id": 1761,
                        "name": "VariableDeclaration",
                        "src": "1741:31:14"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_currentTokenAmount",
                            "scope": 2115,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "uint256",
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 1762,
                                "name": "ElementaryTypeName",
                                "src": "1838:7:14"
                            }
                        ],
                        "id": 1763,
                        "name": "VariableDeclaration",
                        "src": "1838:36:14"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_currentExpectedBalance",
                            "scope": 2115,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "uint256",
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 1764,
                                "name": "ElementaryTypeName",
                                "src": "1959:7:14"
                            }
                        ],
                        "id": 1765,
                        "name": "VariableDeclaration",
                        "src": "1959:40:14"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": true,
                            "kind": "constructor",
                            "modifiers": [
                                null
                            ],
                            "name": "",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1766,
                                "name": "ParameterList",
                                "src": "2017:2:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1767,
                                "name": "ParameterList",
                                "src": "2020:0:14"
                            },
                            {
                                "attributes": {
                                    "statements": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1768,
                                "name": "Block",
                                "src": "2020:2:14"
                            }
                        ],
                        "id": 1769,
                        "name": "FunctionDefinition",
                        "src": "2006:16:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "9e976db1",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "invoke",
                            "scope": 2115,
                            "stateMutability": "payable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "invokeTo",
                                            "scope": 1880,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 1770,
                                                "name": "ElementaryTypeName",
                                                "src": "2053:7:14"
                                            }
                                        ],
                                        "id": 1771,
                                        "name": "VariableDeclaration",
                                        "src": "2053:16:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "invokeData",
                                            "scope": 1880,
                                            "stateVariable": false,
                                            "storageLocation": "calldata",
                                            "type": "bytes",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bytes",
                                                    "type": "bytes"
                                                },
                                                "id": 1772,
                                                "name": "ElementaryTypeName",
                                                "src": "2079:5:14"
                                            }
                                        ],
                                        "id": 1773,
                                        "name": "VariableDeclaration",
                                        "src": "2079:25:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "underlyingAmount",
                                            "scope": 1880,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1774,
                                                "name": "ElementaryTypeName",
                                                "src": "2114:7:14"
                                            }
                                        ],
                                        "id": 1775,
                                        "name": "VariableDeclaration",
                                        "src": "2114:24:14"
                                    }
                                ],
                                "id": 1776,
                                "name": "ParameterList",
                                "src": "2043:101:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1781,
                                "name": "ParameterList",
                                "src": "2189:0:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 6294,
                                            "type": "modifier ()",
                                            "value": "nonReentrant"
                                        },
                                        "id": 1777,
                                        "name": "Identifier",
                                        "src": "2162:12:14"
                                    }
                                ],
                                "id": 1778,
                                "name": "ModifierInvocation",
                                "src": "2162:12:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 6212,
                                            "type": "modifier ()",
                                            "value": "whenNotPaused"
                                        },
                                        "id": 1779,
                                        "name": "Identifier",
                                        "src": "2175:13:14"
                                    }
                                ],
                                "id": 1780,
                                "name": "ModifierInvocation",
                                "src": "2175:13:14"
                            },
                            {
                                "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_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_3d841e9495eb9aca67b9c767c4a03783461f65ceccd89be732f7fa54f6a79acd",
                                                                    "typeString": "literal_string \"KToken: cannot invoke this contract\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 1782,
                                                        "name": "Identifier",
                                                        "src": "2199:7:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1771,
                                                                    "type": "address",
                                                                    "value": "invokeTo"
                                                                },
                                                                "id": 1783,
                                                                "name": "Identifier",
                                                                "src": "2220:8:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_contract$_KToken_$2115",
                                                                                    "typeString": "contract KToken"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 1784,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "2232:7:14"
                                                                            }
                                                                        ],
                                                                        "id": 1785,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "2232:7:14"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": -28,
                                                                            "type": "contract KToken",
                                                                            "value": "this"
                                                                        },
                                                                        "id": 1786,
                                                                        "name": "Identifier",
                                                                        "src": "2240:4:14"
                                                                    }
                                                                ],
                                                                "id": 1787,
                                                                "name": "FunctionCall",
                                                                "src": "2232:13:14"
                                                            }
                                                        ],
                                                        "id": 1788,
                                                        "name": "BinaryOperation",
                                                        "src": "2220:25:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "4b546f6b656e3a2063616e6e6f7420696e766f6b65207468697320636f6e7472616374",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"KToken: cannot invoke this contract\"",
                                                            "value": "KToken: cannot invoke this contract"
                                                        },
                                                        "id": 1789,
                                                        "name": "Literal",
                                                        "src": "2259:37:14"
                                                    }
                                                ],
                                                "id": 1790,
                                                "name": "FunctionCall",
                                                "src": "2199:107:14"
                                            }
                                        ],
                                        "id": 1791,
                                        "name": "ExpressionStatement",
                                        "src": "2199:107:14"
                                    },
                                    {
                                        "attributes": {
                                            "assignments": [
                                                1793
                                            ]
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "constant": false,
                                                    "mutability": "mutable",
                                                    "name": "startingBalance",
                                                    "scope": 1879,
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "type": "uint256",
                                                    "visibility": "internal"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "name": "uint256",
                                                            "type": "uint256"
                                                        },
                                                        "id": 1792,
                                                        "name": "ElementaryTypeName",
                                                        "src": "2375:7:14"
                                                    }
                                                ],
                                                "id": 1793,
                                                "name": "VariableDeclaration",
                                                "src": "2375:23:14"
                                            },
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "sub",
                                                            "referencedDeclaration": 5434,
                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "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": 5174,
                                                                            "type": "function () view returns (uint256)",
                                                                            "value": "totalReserve"
                                                                        },
                                                                        "id": 1794,
                                                                        "name": "Identifier",
                                                                        "src": "2401:12:14"
                                                                    }
                                                                ],
                                                                "id": 1795,
                                                                "name": "FunctionCall",
                                                                "src": "2401:14:14"
                                                            }
                                                        ],
                                                        "id": 1796,
                                                        "name": "MemberAccess",
                                                        "src": "2401:18:14"
                                                    },
                                                    {
                                                        "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": 1888,
                                                                    "type": "function () view returns (uint256)",
                                                                    "value": "payableReserveAdjustment"
                                                                },
                                                                "id": 1797,
                                                                "name": "Identifier",
                                                                "src": "2433:24:14"
                                                            }
                                                        ],
                                                        "id": 1798,
                                                        "name": "FunctionCall",
                                                        "src": "2433:26:14"
                                                    }
                                                ],
                                                "id": 1799,
                                                "name": "FunctionCall",
                                                "src": "2401:68:14"
                                            }
                                        ],
                                        "id": 1800,
                                        "name": "VariableDeclarationStatement",
                                        "src": "2375:94:14"
                                    },
                                    {
                                        "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_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1910,
                                                            "type": "function (address,uint256,uint256)",
                                                            "value": "setInvocationState"
                                                        },
                                                        "id": 1801,
                                                        "name": "Identifier",
                                                        "src": "2479:18:14"
                                                    },
                                                    {
                                                        "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": 1802,
                                                                "name": "Identifier",
                                                                "src": "2511:3:14"
                                                            }
                                                        ],
                                                        "id": 1803,
                                                        "name": "MemberAccess",
                                                        "src": "2511:10:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1775,
                                                            "type": "uint256",
                                                            "value": "underlyingAmount"
                                                        },
                                                        "id": 1804,
                                                        "name": "Identifier",
                                                        "src": "2535:16:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1964,
                                                                    "type": "function (uint256,uint256) view returns (uint256)",
                                                                    "value": "calculateExpectedBalance"
                                                                },
                                                                "id": 1805,
                                                                "name": "Identifier",
                                                                "src": "2565:24:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1793,
                                                                    "type": "uint256",
                                                                    "value": "startingBalance"
                                                                },
                                                                "id": 1806,
                                                                "name": "Identifier",
                                                                "src": "2590:15:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1775,
                                                                    "type": "uint256",
                                                                    "value": "underlyingAmount"
                                                                },
                                                                "id": 1807,
                                                                "name": "Identifier",
                                                                "src": "2607:16:14"
                                                            }
                                                        ],
                                                        "id": 1808,
                                                        "name": "FunctionCall",
                                                        "src": "2565:59:14"
                                                    }
                                                ],
                                                "id": 1809,
                                                "name": "FunctionCall",
                                                "src": "2479:155:14"
                                            }
                                        ],
                                        "id": 1810,
                                        "name": "ExpressionStatement",
                                        "src": "2479:155:14"
                                    },
                                    {
                                        "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_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_9a876903edbe61c9c9bb19657e7f4f284ed0b2ad443be8d0a136778f9de7160d",
                                                                    "typeString": "literal_string \"KToken: unable to transfer invocation amount\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 1811,
                                                        "name": "Identifier",
                                                        "src": "2737:7:14"
                                                    },
                                                    {
                                                        "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_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5080,
                                                                    "type": "function (address,uint256) returns (bool)",
                                                                    "value": "transferUnderlying"
                                                                },
                                                                "id": 1812,
                                                                "name": "Identifier",
                                                                "src": "2758:18:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1771,
                                                                    "type": "address",
                                                                    "value": "invokeTo"
                                                                },
                                                                "id": 1813,
                                                                "name": "Identifier",
                                                                "src": "2777:8:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1775,
                                                                    "type": "uint256",
                                                                    "value": "underlyingAmount"
                                                                },
                                                                "id": 1814,
                                                                "name": "Identifier",
                                                                "src": "2787:16:14"
                                                            }
                                                        ],
                                                        "id": 1815,
                                                        "name": "FunctionCall",
                                                        "src": "2758:46:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220696e766f636174696f6e20616d6f756e74",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"KToken: unable to transfer invocation amount\"",
                                                            "value": "KToken: unable to transfer invocation amount"
                                                        },
                                                        "id": 1816,
                                                        "name": "Literal",
                                                        "src": "2818:46:14"
                                                    }
                                                ],
                                                "id": 1817,
                                                "name": "FunctionCall",
                                                "src": "2737:137:14"
                                            }
                                        ],
                                        "id": 1818,
                                        "name": "ExpressionStatement",
                                        "src": "2737:137:14"
                                    },
                                    {
                                        "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"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                "value"
                                                            ],
                                                            "type": "function (bytes memory) payable external"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                                            "typeString": "bytes calldata"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "execute",
                                                                    "referencedDeclaration": 1177,
                                                                    "type": "function (bytes memory) payable external"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "isStructConstructorCall": false,
                                                                            "lValueRequested": false,
                                                                            "names": [
                                                                                null
                                                                            ],
                                                                            "tryCall": false,
                                                                            "type": "contract IInvokable",
                                                                            "type_conversion": true
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "argumentTypes": [
                                                                                        {
                                                                                            "typeIdentifier": "t_address",
                                                                                            "typeString": "address"
                                                                                        }
                                                                                    ],
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1178,
                                                                                    "type": "type(contract IInvokable)",
                                                                                    "value": "IInvokable"
                                                                                },
                                                                                "id": 1819,
                                                                                "name": "Identifier",
                                                                                "src": "2924:10:14"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1771,
                                                                                    "type": "address",
                                                                                    "value": "invokeTo"
                                                                                },
                                                                                "id": 1820,
                                                                                "name": "Identifier",
                                                                                "src": "2935:8:14"
                                                                            }
                                                                        ],
                                                                        "id": 1821,
                                                                        "name": "FunctionCall",
                                                                        "src": "2924:20:14"
                                                                    }
                                                                ],
                                                                "id": 1822,
                                                                "name": "MemberAccess",
                                                                "src": "2924:28:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "value",
                                                                    "type": "uint256"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": -15,
                                                                            "type": "msg",
                                                                            "value": "msg"
                                                                        },
                                                                        "id": 1823,
                                                                        "name": "Identifier",
                                                                        "src": "2960:3:14"
                                                                    }
                                                                ],
                                                                "id": 1824,
                                                                "name": "MemberAccess",
                                                                "src": "2960:9:14"
                                                            }
                                                        ],
                                                        "id": 1825,
                                                        "name": "FunctionCallOptions",
                                                        "src": "2924:46:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1773,
                                                            "type": "bytes calldata",
                                                            "value": "invokeData"
                                                        },
                                                        "id": 1826,
                                                        "name": "Identifier",
                                                        "src": "2971:10:14"
                                                    }
                                                ],
                                                "id": 1827,
                                                "name": "FunctionCall",
                                                "src": "2924:58:14"
                                            }
                                        ],
                                        "id": 1828,
                                        "name": "ExpressionStatement",
                                        "src": "2924:58:14"
                                    },
                                    {
                                        "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_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_bytes32",
                                                                    "typeString": "bytes32"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1745,
                                                            "type": "function (address,uint256,bytes32,uint256)",
                                                            "value": "Invocation"
                                                        },
                                                        "id": 1829,
                                                        "name": "Identifier",
                                                        "src": "2997:10:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1771,
                                                            "type": "address",
                                                            "value": "invokeTo"
                                                        },
                                                        "id": 1830,
                                                        "name": "Identifier",
                                                        "src": "3021:8:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "value",
                                                            "type": "uint256"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": -15,
                                                                    "type": "msg",
                                                                    "value": "msg"
                                                                },
                                                                "id": 1831,
                                                                "name": "Identifier",
                                                                "src": "3043:3:14"
                                                            }
                                                        ],
                                                        "id": 1832,
                                                        "name": "MemberAccess",
                                                        "src": "3043:9:14"
                                                    },
                                                    {
                                                        "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_calldata_ptr",
                                                                            "typeString": "bytes calldata"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": -8,
                                                                    "type": "function (bytes memory) pure returns (bytes32)",
                                                                    "value": "keccak256"
                                                                },
                                                                "id": 1833,
                                                                "name": "Identifier",
                                                                "src": "3066:9:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1773,
                                                                    "type": "bytes calldata",
                                                                    "value": "invokeData"
                                                                },
                                                                "id": 1834,
                                                                "name": "Identifier",
                                                                "src": "3076:10:14"
                                                            }
                                                        ],
                                                        "id": 1835,
                                                        "name": "FunctionCall",
                                                        "src": "3066:21:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1775,
                                                            "type": "uint256",
                                                            "value": "underlyingAmount"
                                                        },
                                                        "id": 1836,
                                                        "name": "Identifier",
                                                        "src": "3101:16:14"
                                                    }
                                                ],
                                                "id": 1837,
                                                "name": "FunctionCall",
                                                "src": "2997:130:14"
                                            }
                                        ],
                                        "id": 1838,
                                        "name": "EmitStatement",
                                        "src": "2992:135:14"
                                    },
                                    {
                                        "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_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_0992a0a38e0987f3f154612fd783c1937b8b2184454595eb3eee36f99858ff3b",
                                                                    "typeString": "literal_string \"KToken: incorrect ending balance\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 1839,
                                                        "name": "Identifier",
                                                        "src": "3200:7:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "==",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "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": 5174,
                                                                            "type": "function () view returns (uint256)",
                                                                            "value": "totalReserve"
                                                                        },
                                                                        "id": 1840,
                                                                        "name": "Identifier",
                                                                        "src": "3221:12:14"
                                                                    }
                                                                ],
                                                                "id": 1841,
                                                                "name": "FunctionCall",
                                                                "src": "3221:14:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1765,
                                                                    "type": "uint256",
                                                                    "value": "_currentExpectedBalance"
                                                                },
                                                                "id": 1842,
                                                                "name": "Identifier",
                                                                "src": "3239:23:14"
                                                            }
                                                        ],
                                                        "id": 1843,
                                                        "name": "BinaryOperation",
                                                        "src": "3221:41:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "4b546f6b656e3a20696e636f727265637420656e64696e672062616c616e6365",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"KToken: incorrect ending balance\"",
                                                            "value": "KToken: incorrect ending balance"
                                                        },
                                                        "id": 1844,
                                                        "name": "Literal",
                                                        "src": "3276:34:14"
                                                    }
                                                ],
                                                "id": 1845,
                                                "name": "FunctionCall",
                                                "src": "3200:120:14"
                                            }
                                        ],
                                        "id": 1846,
                                        "name": "ExpressionStatement",
                                        "src": "3200:120:14"
                                    },
                                    {
                                        "attributes": {
                                            "assignments": [
                                                1848
                                            ]
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "constant": false,
                                                    "mutability": "mutable",
                                                    "name": "platformReward",
                                                    "scope": 1879,
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "type": "uint256",
                                                    "visibility": "internal"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "name": "uint256",
                                                            "type": "uint256"
                                                        },
                                                        "id": 1847,
                                                        "name": "ElementaryTypeName",
                                                        "src": "3369:7:14"
                                                    }
                                                ],
                                                "id": 1848,
                                                "name": "VariableDeclaration",
                                                "src": "3369:22:14"
                                            },
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1942,
                                                            "type": "function (uint256) view returns (uint256)",
                                                            "value": "calculatePlatformReward"
                                                        },
                                                        "id": 1849,
                                                        "name": "Identifier",
                                                        "src": "3394:23:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1775,
                                                            "type": "uint256",
                                                            "value": "underlyingAmount"
                                                        },
                                                        "id": 1850,
                                                        "name": "Identifier",
                                                        "src": "3418:16:14"
                                                    }
                                                ],
                                                "id": 1851,
                                                "name": "FunctionCall",
                                                "src": "3394:41:14"
                                            }
                                        ],
                                        "id": 1852,
                                        "name": "VariableDeclarationStatement",
                                        "src": "3369:66:14"
                                    },
                                    {
                                        "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_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_bf7cd392b81f131d7dd401c8cb1824a8d9e742896f54853b90886c17ebc8d33c",
                                                                    "typeString": "literal_string \"KToken: unable to transfer platform reward\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 1853,
                                                        "name": "Identifier",
                                                        "src": "3446:7:14"
                                                    },
                                                    {
                                                        "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_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5080,
                                                                    "type": "function (address,uint256) returns (bool)",
                                                                    "value": "transferUnderlying"
                                                                },
                                                                "id": 1854,
                                                                "name": "Identifier",
                                                                "src": "3467:18:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1759,
                                                                    "type": "address",
                                                                    "value": "_platformVaultAddress"
                                                                },
                                                                "id": 1855,
                                                                "name": "Identifier",
                                                                "src": "3486:21:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1848,
                                                                    "type": "uint256",
                                                                    "value": "platformReward"
                                                                },
                                                                "id": 1856,
                                                                "name": "Identifier",
                                                                "src": "3509:14:14"
                                                            }
                                                        ],
                                                        "id": 1857,
                                                        "name": "FunctionCall",
                                                        "src": "3467:57:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "4b546f6b656e3a20756e61626c6520746f207472616e7366657220706c6174666f726d20726577617264",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"KToken: unable to transfer platform reward\"",
                                                            "value": "KToken: unable to transfer platform reward"
                                                        },
                                                        "id": 1858,
                                                        "name": "Literal",
                                                        "src": "3538:44:14"
                                                    }
                                                ],
                                                "id": 1859,
                                                "name": "FunctionCall",
                                                "src": "3446:146:14"
                                            }
                                        ],
                                        "id": 1860,
                                        "name": "ExpressionStatement",
                                        "src": "3446:146:14"
                                    },
                                    {
                                        "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_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1753,
                                                            "type": "function (uint256,uint256,address)",
                                                            "value": "Reward"
                                                        },
                                                        "id": 1861,
                                                        "name": "Identifier",
                                                        "src": "3607:6:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1926,
                                                                    "type": "function (uint256) view returns (uint256)",
                                                                    "value": "calculatePoolReward"
                                                                },
                                                                "id": 1862,
                                                                "name": "Identifier",
                                                                "src": "3627:19:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1775,
                                                                    "type": "uint256",
                                                                    "value": "underlyingAmount"
                                                                },
                                                                "id": 1863,
                                                                "name": "Identifier",
                                                                "src": "3647:16:14"
                                                            }
                                                        ],
                                                        "id": 1864,
                                                        "name": "FunctionCall",
                                                        "src": "3627:37:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1848,
                                                            "type": "uint256",
                                                            "value": "platformReward"
                                                        },
                                                        "id": 1865,
                                                        "name": "Identifier",
                                                        "src": "3678:14:14"
                                                    },
                                                    {
                                                        "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": 5196,
                                                                    "type": "function () view returns (address)",
                                                                    "value": "underlying"
                                                                },
                                                                "id": 1866,
                                                                "name": "Identifier",
                                                                "src": "3706:10:14"
                                                            }
                                                        ],
                                                        "id": 1867,
                                                        "name": "FunctionCall",
                                                        "src": "3706:12:14"
                                                    }
                                                ],
                                                "id": 1868,
                                                "name": "FunctionCall",
                                                "src": "3607:121:14"
                                            }
                                        ],
                                        "id": 1869,
                                        "name": "EmitStatement",
                                        "src": "3602:126:14"
                                    },
                                    {
                                        "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_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                    "typeString": "int_const 0"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1910,
                                                            "type": "function (address,uint256,uint256)",
                                                            "value": "setInvocationState"
                                                        },
                                                        "id": 1870,
                                                        "name": "Identifier",
                                                        "src": "3779:18:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": true
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "type": "type(address)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "name": "address"
                                                                        },
                                                                        "id": 1871,
                                                                        "name": "ElementaryTypeName",
                                                                        "src": "3798:7:14"
                                                                    }
                                                                ],
                                                                "id": 1872,
                                                                "name": "ElementaryTypeNameExpression",
                                                                "src": "3798:7:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "30",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "number",
                                                                    "type": "int_const 0",
                                                                    "value": "0"
                                                                },
                                                                "id": 1873,
                                                                "name": "Literal",
                                                                "src": "3806:1:14"
                                                            }
                                                        ],
                                                        "id": 1874,
                                                        "name": "FunctionCall",
                                                        "src": "3798:10:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "30",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "number",
                                                            "type": "int_const 0",
                                                            "value": "0"
                                                        },
                                                        "id": 1875,
                                                        "name": "Literal",
                                                        "src": "3810:1:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "30",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "number",
                                                            "type": "int_const 0",
                                                            "value": "0"
                                                        },
                                                        "id": 1876,
                                                        "name": "Literal",
                                                        "src": "3813:1:14"
                                                    }
                                                ],
                                                "id": 1877,
                                                "name": "FunctionCall",
                                                "src": "3779:36:14"
                                            }
                                        ],
                                        "id": 1878,
                                        "name": "ExpressionStatement",
                                        "src": "3779:36:14"
                                    }
                                ],
                                "id": 1879,
                                "name": "Block",
                                "src": "2189:1633:14"
                            }
                        ],
                        "id": 1880,
                        "name": "FunctionDefinition",
                        "src": "2028:1794:14"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "payableReserveAdjustment",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": true,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1881,
                                "name": "ParameterList",
                                "src": "3861:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 1888,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1882,
                                                "name": "ElementaryTypeName",
                                                "src": "3927:7:14"
                                            }
                                        ],
                                        "id": 1883,
                                        "name": "VariableDeclaration",
                                        "src": "3927:7:14"
                                    }
                                ],
                                "id": 1884,
                                "name": "ParameterList",
                                "src": "3926:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1884
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "30",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "number",
                                                    "type": "int_const 0",
                                                    "value": "0"
                                                },
                                                "id": 1885,
                                                "name": "Literal",
                                                "src": "3957:1:14"
                                            }
                                        ],
                                        "id": 1886,
                                        "name": "Return",
                                        "src": "3950:8:14"
                                    }
                                ],
                                "id": 1887,
                                "name": "Block",
                                "src": "3940:25:14"
                            }
                        ],
                        "id": 1888,
                        "name": "FunctionDefinition",
                        "src": "3828:137:14"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "setInvocationState",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "currentSender",
                                            "scope": 1910,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 1889,
                                                "name": "ElementaryTypeName",
                                                "src": "4008:7:14"
                                            }
                                        ],
                                        "id": 1890,
                                        "name": "VariableDeclaration",
                                        "src": "4008:21:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "currentTokenAmount",
                                            "scope": 1910,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1891,
                                                "name": "ElementaryTypeName",
                                                "src": "4039:7:14"
                                            }
                                        ],
                                        "id": 1892,
                                        "name": "VariableDeclaration",
                                        "src": "4039:26:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "currentExpectedBalance",
                                            "scope": 1910,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1893,
                                                "name": "ElementaryTypeName",
                                                "src": "4075:7:14"
                                            }
                                        ],
                                        "id": 1894,
                                        "name": "VariableDeclaration",
                                        "src": "4075:30:14"
                                    }
                                ],
                                "id": 1895,
                                "name": "ParameterList",
                                "src": "3998:113:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1896,
                                "name": "ParameterList",
                                "src": "4121:0:14"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "address"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1761,
                                                            "type": "address",
                                                            "value": "_currentSender"
                                                        },
                                                        "id": 1897,
                                                        "name": "Identifier",
                                                        "src": "4131:14:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1890,
                                                            "type": "address",
                                                            "value": "currentSender"
                                                        },
                                                        "id": 1898,
                                                        "name": "Identifier",
                                                        "src": "4148:13:14"
                                                    }
                                                ],
                                                "id": 1899,
                                                "name": "Assignment",
                                                "src": "4131:30:14"
                                            }
                                        ],
                                        "id": 1900,
                                        "name": "ExpressionStatement",
                                        "src": "4131:30:14"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1763,
                                                            "type": "uint256",
                                                            "value": "_currentTokenAmount"
                                                        },
                                                        "id": 1901,
                                                        "name": "Identifier",
                                                        "src": "4171:19:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1892,
                                                            "type": "uint256",
                                                            "value": "currentTokenAmount"
                                                        },
                                                        "id": 1902,
                                                        "name": "Identifier",
                                                        "src": "4193:18:14"
                                                    }
                                                ],
                                                "id": 1903,
                                                "name": "Assignment",
                                                "src": "4171:40:14"
                                            }
                                        ],
                                        "id": 1904,
                                        "name": "ExpressionStatement",
                                        "src": "4171:40:14"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1765,
                                                            "type": "uint256",
                                                            "value": "_currentExpectedBalance"
                                                        },
                                                        "id": 1905,
                                                        "name": "Identifier",
                                                        "src": "4221:23:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1894,
                                                            "type": "uint256",
                                                            "value": "currentExpectedBalance"
                                                        },
                                                        "id": 1906,
                                                        "name": "Identifier",
                                                        "src": "4247:22:14"
                                                    }
                                                ],
                                                "id": 1907,
                                                "name": "Assignment",
                                                "src": "4221:48:14"
                                            }
                                        ],
                                        "id": 1908,
                                        "name": "ExpressionStatement",
                                        "src": "4221:48:14"
                                    }
                                ],
                                "id": 1909,
                                "name": "Block",
                                "src": "4121:155:14"
                            }
                        ],
                        "id": 1910,
                        "name": "FunctionDefinition",
                        "src": "3971:305:14"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "calculatePoolReward",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "tokenAmount",
                                            "scope": 1926,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1911,
                                                "name": "ElementaryTypeName",
                                                "src": "4311:7:14"
                                            }
                                        ],
                                        "id": 1912,
                                        "name": "VariableDeclaration",
                                        "src": "4311:19:14"
                                    }
                                ],
                                "id": 1913,
                                "name": "ParameterList",
                                "src": "4310:21:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 1926,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1914,
                                                "name": "ElementaryTypeName",
                                                "src": "4379:7:14"
                                            }
                                        ],
                                        "id": 1915,
                                        "name": "VariableDeclaration",
                                        "src": "4379:7:14"
                                    }
                                ],
                                "id": 1916,
                                "name": "ParameterList",
                                "src": "4378:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1916
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                                    "typeString": "int_const 10000"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "div",
                                                            "referencedDeclaration": 5514,
                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "uint256",
                                                                    "type_conversion": false
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "member_name": "mul",
                                                                            "referencedDeclaration": 5497,
                                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1912,
                                                                                    "type": "uint256",
                                                                                    "value": "tokenAmount"
                                                                                },
                                                                                "id": 1917,
                                                                                "name": "Identifier",
                                                                                "src": "4409:11:14"
                                                                            }
                                                                        ],
                                                                        "id": 1918,
                                                                        "name": "MemberAccess",
                                                                        "src": "4409:15:14"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": 1755,
                                                                            "type": "uint256",
                                                                            "value": "_poolRewardBips"
                                                                        },
                                                                        "id": 1919,
                                                                        "name": "Identifier",
                                                                        "src": "4425:15:14"
                                                                    }
                                                                ],
                                                                "id": 1920,
                                                                "name": "FunctionCall",
                                                                "src": "4409:32:14"
                                                            }
                                                        ],
                                                        "id": 1921,
                                                        "name": "MemberAccess",
                                                        "src": "4409:36:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "3130303030",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "number",
                                                            "type": "int_const 10000",
                                                            "value": "10000"
                                                        },
                                                        "id": 1922,
                                                        "name": "Literal",
                                                        "src": "4446:5:14"
                                                    }
                                                ],
                                                "id": 1923,
                                                "name": "FunctionCall",
                                                "src": "4409:43:14"
                                            }
                                        ],
                                        "id": 1924,
                                        "name": "Return",
                                        "src": "4402:50:14"
                                    }
                                ],
                                "id": 1925,
                                "name": "Block",
                                "src": "4392:67:14"
                            }
                        ],
                        "id": 1926,
                        "name": "FunctionDefinition",
                        "src": "4282:177:14"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "calculatePlatformReward",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "tokenAmount",
                                            "scope": 1942,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1927,
                                                "name": "ElementaryTypeName",
                                                "src": "4498:7:14"
                                            }
                                        ],
                                        "id": 1928,
                                        "name": "VariableDeclaration",
                                        "src": "4498:19:14"
                                    }
                                ],
                                "id": 1929,
                                "name": "ParameterList",
                                "src": "4497:21:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 1942,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1930,
                                                "name": "ElementaryTypeName",
                                                "src": "4566:7:14"
                                            }
                                        ],
                                        "id": 1931,
                                        "name": "VariableDeclaration",
                                        "src": "4566:7:14"
                                    }
                                ],
                                "id": 1932,
                                "name": "ParameterList",
                                "src": "4565:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1932
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_rational_10000_by_1",
                                                                    "typeString": "int_const 10000"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "div",
                                                            "referencedDeclaration": 5514,
                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "uint256",
                                                                    "type_conversion": false
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "member_name": "mul",
                                                                            "referencedDeclaration": 5497,
                                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1928,
                                                                                    "type": "uint256",
                                                                                    "value": "tokenAmount"
                                                                                },
                                                                                "id": 1933,
                                                                                "name": "Identifier",
                                                                                "src": "4596:11:14"
                                                                            }
                                                                        ],
                                                                        "id": 1934,
                                                                        "name": "MemberAccess",
                                                                        "src": "4596:15:14"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": 1757,
                                                                            "type": "uint256",
                                                                            "value": "_platformRewardBips"
                                                                        },
                                                                        "id": 1935,
                                                                        "name": "Identifier",
                                                                        "src": "4612:19:14"
                                                                    }
                                                                ],
                                                                "id": 1936,
                                                                "name": "FunctionCall",
                                                                "src": "4596:36:14"
                                                            }
                                                        ],
                                                        "id": 1937,
                                                        "name": "MemberAccess",
                                                        "src": "4596:40:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "3130303030",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "number",
                                                            "type": "int_const 10000",
                                                            "value": "10000"
                                                        },
                                                        "id": 1938,
                                                        "name": "Literal",
                                                        "src": "4637:5:14"
                                                    }
                                                ],
                                                "id": 1939,
                                                "name": "FunctionCall",
                                                "src": "4596:47:14"
                                            }
                                        ],
                                        "id": 1940,
                                        "name": "Return",
                                        "src": "4589:54:14"
                                    }
                                ],
                                "id": 1941,
                                "name": "Block",
                                "src": "4579:71:14"
                            }
                        ],
                        "id": 1942,
                        "name": "FunctionDefinition",
                        "src": "4465:185:14"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "calculateExpectedBalance",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "startingBalance",
                                            "scope": 1964,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1943,
                                                "name": "ElementaryTypeName",
                                                "src": "4699:7:14"
                                            }
                                        ],
                                        "id": 1944,
                                        "name": "VariableDeclaration",
                                        "src": "4699:23:14"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "tokenAmount",
                                            "scope": 1964,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1945,
                                                "name": "ElementaryTypeName",
                                                "src": "4732:7:14"
                                            }
                                        ],
                                        "id": 1946,
                                        "name": "VariableDeclaration",
                                        "src": "4732:19:14"
                                    }
                                ],
                                "id": 1947,
                                "name": "ParameterList",
                                "src": "4689:68:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 1964,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1948,
                                                "name": "ElementaryTypeName",
                                                "src": "4781:7:14"
                                            }
                                        ],
                                        "id": 1949,
                                        "name": "VariableDeclaration",
                                        "src": "4781:7:14"
                                    }
                                ],
                                "id": 1950,
                                "name": "ParameterList",
                                "src": "4780:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1950
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "add",
                                                            "referencedDeclaration": 5417,
                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "uint256",
                                                                    "type_conversion": false
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "member_name": "add",
                                                                            "referencedDeclaration": 5417,
                                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1944,
                                                                                    "type": "uint256",
                                                                                    "value": "startingBalance"
                                                                                },
                                                                                "id": 1951,
                                                                                "name": "Identifier",
                                                                                "src": "4819:15:14"
                                                                            }
                                                                        ],
                                                                        "id": 1952,
                                                                        "name": "MemberAccess",
                                                                        "src": "4819:19:14"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "isStructConstructorCall": false,
                                                                            "lValueRequested": false,
                                                                            "names": [
                                                                                null
                                                                            ],
                                                                            "tryCall": false,
                                                                            "type": "uint256",
                                                                            "type_conversion": false
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "argumentTypes": [
                                                                                        {
                                                                                            "typeIdentifier": "t_uint256",
                                                                                            "typeString": "uint256"
                                                                                        }
                                                                                    ],
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1926,
                                                                                    "type": "function (uint256) view returns (uint256)",
                                                                                    "value": "calculatePoolReward"
                                                                                },
                                                                                "id": 1953,
                                                                                "name": "Identifier",
                                                                                "src": "4839:19:14"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1946,
                                                                                    "type": "uint256",
                                                                                    "value": "tokenAmount"
                                                                                },
                                                                                "id": 1954,
                                                                                "name": "Identifier",
                                                                                "src": "4859:11:14"
                                                                            }
                                                                        ],
                                                                        "id": 1955,
                                                                        "name": "FunctionCall",
                                                                        "src": "4839:32:14"
                                                                    }
                                                                ],
                                                                "id": 1956,
                                                                "name": "FunctionCall",
                                                                "src": "4819:53:14"
                                                            }
                                                        ],
                                                        "id": 1957,
                                                        "name": "MemberAccess",
                                                        "src": "4819:57:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1942,
                                                                    "type": "function (uint256) view returns (uint256)",
                                                                    "value": "calculatePlatformReward"
                                                                },
                                                                "id": 1958,
                                                                "name": "Identifier",
                                                                "src": "4894:23:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1946,
                                                                    "type": "uint256",
                                                                    "value": "tokenAmount"
                                                                },
                                                                "id": 1959,
                                                                "name": "Identifier",
                                                                "src": "4918:11:14"
                                                            }
                                                        ],
                                                        "id": 1960,
                                                        "name": "FunctionCall",
                                                        "src": "4894:36:14"
                                                    }
                                                ],
                                                "id": 1961,
                                                "name": "FunctionCall",
                                                "src": "4819:125:14"
                                            }
                                        ],
                                        "id": 1962,
                                        "name": "Return",
                                        "src": "4800:144:14"
                                    }
                                ],
                                "id": 1963,
                                "name": "Block",
                                "src": "4790:161:14"
                            }
                        ],
                        "id": 1964,
                        "name": "FunctionDefinition",
                        "src": "4656:295:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "b1197239",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "calculateRepaymentAmount",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "tokenAmount",
                                            "scope": 1984,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1965,
                                                "name": "ElementaryTypeName",
                                                "src": "4991:7:14"
                                            }
                                        ],
                                        "id": 1966,
                                        "name": "VariableDeclaration",
                                        "src": "4991:19:14"
                                    }
                                ],
                                "id": 1967,
                                "name": "ParameterList",
                                "src": "4990:21:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 1984,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1968,
                                                "name": "ElementaryTypeName",
                                                "src": "5059:7:14"
                                            }
                                        ],
                                        "id": 1969,
                                        "name": "VariableDeclaration",
                                        "src": "5059:7:14"
                                    }
                                ],
                                "id": 1970,
                                "name": "ParameterList",
                                "src": "5058:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1970
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "add",
                                                            "referencedDeclaration": 5417,
                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "uint256",
                                                                    "type_conversion": false
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_uint256",
                                                                                    "typeString": "uint256"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "member_name": "add",
                                                                            "referencedDeclaration": 5417,
                                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1966,
                                                                                    "type": "uint256",
                                                                                    "value": "tokenAmount"
                                                                                },
                                                                                "id": 1971,
                                                                                "name": "Identifier",
                                                                                "src": "5101:11:14"
                                                                            }
                                                                        ],
                                                                        "id": 1972,
                                                                        "name": "MemberAccess",
                                                                        "src": "5101:15:14"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": false,
                                                                            "isStructConstructorCall": false,
                                                                            "lValueRequested": false,
                                                                            "names": [
                                                                                null
                                                                            ],
                                                                            "tryCall": false,
                                                                            "type": "uint256",
                                                                            "type_conversion": false
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "argumentTypes": [
                                                                                        {
                                                                                            "typeIdentifier": "t_uint256",
                                                                                            "typeString": "uint256"
                                                                                        }
                                                                                    ],
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1926,
                                                                                    "type": "function (uint256) view returns (uint256)",
                                                                                    "value": "calculatePoolReward"
                                                                                },
                                                                                "id": 1973,
                                                                                "name": "Identifier",
                                                                                "src": "5117:19:14"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 1966,
                                                                                    "type": "uint256",
                                                                                    "value": "tokenAmount"
                                                                                },
                                                                                "id": 1974,
                                                                                "name": "Identifier",
                                                                                "src": "5137:11:14"
                                                                            }
                                                                        ],
                                                                        "id": 1975,
                                                                        "name": "FunctionCall",
                                                                        "src": "5117:32:14"
                                                                    }
                                                                ],
                                                                "id": 1976,
                                                                "name": "FunctionCall",
                                                                "src": "5101:49:14"
                                                            }
                                                        ],
                                                        "id": 1977,
                                                        "name": "MemberAccess",
                                                        "src": "5101:53:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1942,
                                                                    "type": "function (uint256) view returns (uint256)",
                                                                    "value": "calculatePlatformReward"
                                                                },
                                                                "id": 1978,
                                                                "name": "Identifier",
                                                                "src": "5172:23:14"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1966,
                                                                    "type": "uint256",
                                                                    "value": "tokenAmount"
                                                                },
                                                                "id": 1979,
                                                                "name": "Identifier",
                                                                "src": "5196:11:14"
                                                            }
                                                        ],
                                                        "id": 1980,
                                                        "name": "FunctionCall",
                                                        "src": "5172:36:14"
                                                    }
                                                ],
                                                "id": 1981,
                                                "name": "FunctionCall",
                                                "src": "5101:121:14"
                                            }
                                        ],
                                        "id": 1982,
                                        "name": "Return",
                                        "src": "5082:140:14"
                                    }
                                ],
                                "id": 1983,
                                "name": "Block",
                                "src": "5072:157:14"
                            }
                        ],
                        "id": 1984,
                        "name": "FunctionDefinition",
                        "src": "4957:272:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "fef10b95",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "poolReward",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1985,
                                "name": "ParameterList",
                                "src": "5254:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 1992,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1986,
                                                "name": "ElementaryTypeName",
                                                "src": "5280:7:14"
                                            }
                                        ],
                                        "id": 1987,
                                        "name": "VariableDeclaration",
                                        "src": "5280:7:14"
                                    }
                                ],
                                "id": 1988,
                                "name": "ParameterList",
                                "src": "5279:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1988
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 1755,
                                                    "type": "uint256",
                                                    "value": "_poolRewardBips"
                                                },
                                                "id": 1989,
                                                "name": "Identifier",
                                                "src": "5306:15:14"
                                            }
                                        ],
                                        "id": 1990,
                                        "name": "Return",
                                        "src": "5299:22:14"
                                    }
                                ],
                                "id": 1991,
                                "name": "Block",
                                "src": "5289:39:14"
                            }
                        ],
                        "id": 1992,
                        "name": "FunctionDefinition",
                        "src": "5235:93:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "fe6551b6",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "platformReward",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 1993,
                                "name": "ParameterList",
                                "src": "5357:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2000,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 1994,
                                                "name": "ElementaryTypeName",
                                                "src": "5383:7:14"
                                            }
                                        ],
                                        "id": 1995,
                                        "name": "VariableDeclaration",
                                        "src": "5383:7:14"
                                    }
                                ],
                                "id": 1996,
                                "name": "ParameterList",
                                "src": "5382:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 1996
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 1757,
                                                    "type": "uint256",
                                                    "value": "_platformRewardBips"
                                                },
                                                "id": 1997,
                                                "name": "Identifier",
                                                "src": "5409:19:14"
                                            }
                                        ],
                                        "id": 1998,
                                        "name": "Return",
                                        "src": "5402:26:14"
                                    }
                                ],
                                "id": 1999,
                                "name": "Block",
                                "src": "5392:43:14"
                            }
                        ],
                        "id": 2000,
                        "name": "FunctionDefinition",
                        "src": "5334:101:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "5f39e93a",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "platformVaultAddress",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2001,
                                "name": "ParameterList",
                                "src": "5470:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2008,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 2002,
                                                "name": "ElementaryTypeName",
                                                "src": "5496:7:14"
                                            }
                                        ],
                                        "id": 2003,
                                        "name": "VariableDeclaration",
                                        "src": "5496:7:14"
                                    }
                                ],
                                "id": 2004,
                                "name": "ParameterList",
                                "src": "5495:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 2004
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 1759,
                                                    "type": "address",
                                                    "value": "_platformVaultAddress"
                                                },
                                                "id": 2005,
                                                "name": "Identifier",
                                                "src": "5522:21:14"
                                            }
                                        ],
                                        "id": 2006,
                                        "name": "Return",
                                        "src": "5515:28:14"
                                    }
                                ],
                                "id": 2007,
                                "name": "Block",
                                "src": "5505:45:14"
                            }
                        ],
                        "id": 2008,
                        "name": "FunctionDefinition",
                        "src": "5441:109:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "29d9109c",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "isKToken",
                            "scope": 2115,
                            "stateMutability": "pure",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2009,
                                "name": "ParameterList",
                                "src": "5573:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2016,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 2010,
                                                "name": "ElementaryTypeName",
                                                "src": "5599:4:14"
                                            }
                                        ],
                                        "id": 2011,
                                        "name": "VariableDeclaration",
                                        "src": "5599:4:14"
                                    }
                                ],
                                "id": 2012,
                                "name": "ParameterList",
                                "src": "5598:6:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 2012
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "74727565",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "bool",
                                                    "type": "bool",
                                                    "value": "true"
                                                },
                                                "id": 2013,
                                                "name": "Literal",
                                                "src": "5622:4:14"
                                            }
                                        ],
                                        "id": 2014,
                                        "name": "Return",
                                        "src": "5615:11:14"
                                    }
                                ],
                                "id": 2015,
                                "name": "Block",
                                "src": "5605:28:14"
                            }
                        ],
                        "id": 2016,
                        "name": "FunctionDefinition",
                        "src": "5556:77:14"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                1154
                            ],
                            "functionSelector": "70348f3e",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "currentSender",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 2018,
                                "name": "OverrideSpecifier",
                                "src": "5724:8:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2017,
                                "name": "ParameterList",
                                "src": "5707:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2025,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 2019,
                                                "name": "ElementaryTypeName",
                                                "src": "5742:7:14"
                                            }
                                        ],
                                        "id": 2020,
                                        "name": "VariableDeclaration",
                                        "src": "5742:7:14"
                                    }
                                ],
                                "id": 2021,
                                "name": "ParameterList",
                                "src": "5741:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 2021
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 1761,
                                                    "type": "address",
                                                    "value": "_currentSender"
                                                },
                                                "id": 2022,
                                                "name": "Identifier",
                                                "src": "5768:14:14"
                                            }
                                        ],
                                        "id": 2023,
                                        "name": "Return",
                                        "src": "5761:21:14"
                                    }
                                ],
                                "id": 2024,
                                "name": "Block",
                                "src": "5751:38:14"
                            }
                        ],
                        "id": 2025,
                        "name": "FunctionDefinition",
                        "src": "5685:104:14"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                1159
                            ],
                            "functionSelector": "11eefd5d",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "currentTokenAddress",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 2027,
                                "name": "OverrideSpecifier",
                                "src": "5840:8:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2026,
                                "name": "ParameterList",
                                "src": "5823:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2034,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 2028,
                                                "name": "ElementaryTypeName",
                                                "src": "5858:7:14"
                                            }
                                        ],
                                        "id": 2029,
                                        "name": "VariableDeclaration",
                                        "src": "5858:7:14"
                                    }
                                ],
                                "id": 2030,
                                "name": "ParameterList",
                                "src": "5857:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 2030
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 4927,
                                                    "type": "address",
                                                    "value": "_underlying"
                                                },
                                                "id": 2031,
                                                "name": "Identifier",
                                                "src": "5884:11:14"
                                            }
                                        ],
                                        "id": 2032,
                                        "name": "Return",
                                        "src": "5877:18:14"
                                    }
                                ],
                                "id": 2033,
                                "name": "Block",
                                "src": "5867:35:14"
                            }
                        ],
                        "id": 2034,
                        "name": "FunctionDefinition",
                        "src": "5795:107:14"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                1164
                            ],
                            "functionSelector": "ff69ac36",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "currentTokenAmount",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 2036,
                                "name": "OverrideSpecifier",
                                "src": "5952:8:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2035,
                                "name": "ParameterList",
                                "src": "5935:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2043,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 2037,
                                                "name": "ElementaryTypeName",
                                                "src": "5970:7:14"
                                            }
                                        ],
                                        "id": 2038,
                                        "name": "VariableDeclaration",
                                        "src": "5970:7:14"
                                    }
                                ],
                                "id": 2039,
                                "name": "ParameterList",
                                "src": "5969:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 2039
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 1763,
                                                    "type": "uint256",
                                                    "value": "_currentTokenAmount"
                                                },
                                                "id": 2040,
                                                "name": "Identifier",
                                                "src": "5996:19:14"
                                            }
                                        ],
                                        "id": 2041,
                                        "name": "Return",
                                        "src": "5989:26:14"
                                    }
                                ],
                                "id": 2042,
                                "name": "Block",
                                "src": "5979:43:14"
                            }
                        ],
                        "id": 2043,
                        "name": "FunctionDefinition",
                        "src": "5908:114:14"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                1169
                            ],
                            "functionSelector": "6f27e9d8",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "currentRepaymentAmount",
                            "scope": 2115,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 2045,
                                "name": "OverrideSpecifier",
                                "src": "6076:8:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2044,
                                "name": "ParameterList",
                                "src": "6059:2:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 2056,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 2046,
                                                "name": "ElementaryTypeName",
                                                "src": "6094:7:14"
                                            }
                                        ],
                                        "id": 2047,
                                        "name": "VariableDeclaration",
                                        "src": "6094:7:14"
                                    }
                                ],
                                "id": 2048,
                                "name": "ParameterList",
                                "src": "6093:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 2048
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "uint256",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "member_name": "sub",
                                                            "referencedDeclaration": 5434,
                                                            "type": "function (uint256,uint256) pure returns (uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 1765,
                                                                    "type": "uint256",
                                                                    "value": "_currentExpectedBalance"
                                                                },
                                                                "id": 2049,
                                                                "name": "Identifier",
                                                                "src": "6120:23:14"
                                                            }
                                                        ],
                                                        "id": 2050,
                                                        "name": "MemberAccess",
                                                        "src": "6120:27:14"
                                                    },
                                                    {
                                                        "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": 5174,
                                                                    "type": "function () view returns (uint256)",
                                                                    "value": "totalReserve"
                                                                },
                                                                "id": 2051,
                                                                "name": "Identifier",
                                                                "src": "6148:12:14"
                                                            }
                                                        ],
                                                        "id": 2052,
                                                        "name": "FunctionCall",
                                                        "src": "6148:14:14"
                                                    }
                                                ],
                                                "id": 2053,
                                                "name": "FunctionCall",
                                                "src": "6120:43:14"
                                            }
                                        ],
                                        "id": 2054,
                                        "name": "Return",
                                        "src": "6113:50:14"
                                    }
                                ],
                                "id": 2055,
                                "name": "Block",
                                "src": "6103:67:14"
                            }
                        ],
                        "id": 2056,
                        "name": "FunctionDefinition",
                        "src": "6028:142:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "046e7913",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "setPoolReward",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "poolRewardBips",
                                            "scope": 2068,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 2057,
                                                "name": "ElementaryTypeName",
                                                "src": "6226:7:14"
                                            }
                                        ],
                                        "id": 2058,
                                        "name": "VariableDeclaration",
                                        "src": "6226:22:14"
                                    }
                                ],
                                "id": 2059,
                                "name": "ParameterList",
                                "src": "6225:24:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2062,
                                "name": "ParameterList",
                                "src": "6269:0:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 5337,
                                            "type": "modifier ()",
                                            "value": "onlyOwner"
                                        },
                                        "id": 2060,
                                        "name": "Identifier",
                                        "src": "6259:9:14"
                                    }
                                ],
                                "id": 2061,
                                "name": "ModifierInvocation",
                                "src": "6259:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1755,
                                                            "type": "uint256",
                                                            "value": "_poolRewardBips"
                                                        },
                                                        "id": 2063,
                                                        "name": "Identifier",
                                                        "src": "6279:15:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 2058,
                                                            "type": "uint256",
                                                            "value": "poolRewardBips"
                                                        },
                                                        "id": 2064,
                                                        "name": "Identifier",
                                                        "src": "6297:14:14"
                                                    }
                                                ],
                                                "id": 2065,
                                                "name": "Assignment",
                                                "src": "6279:32:14"
                                            }
                                        ],
                                        "id": 2066,
                                        "name": "ExpressionStatement",
                                        "src": "6279:32:14"
                                    }
                                ],
                                "id": 2067,
                                "name": "Block",
                                "src": "6269:49:14"
                            }
                        ],
                        "id": 2068,
                        "name": "FunctionDefinition",
                        "src": "6203:115:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "f35a37aa",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "setPlatformReward",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "platformRewardBips",
                                            "scope": 2080,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 2069,
                                                "name": "ElementaryTypeName",
                                                "src": "6351:7:14"
                                            }
                                        ],
                                        "id": 2070,
                                        "name": "VariableDeclaration",
                                        "src": "6351:26:14"
                                    }
                                ],
                                "id": 2071,
                                "name": "ParameterList",
                                "src": "6350:28:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2074,
                                "name": "ParameterList",
                                "src": "6398:0:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 5337,
                                            "type": "modifier ()",
                                            "value": "onlyOwner"
                                        },
                                        "id": 2072,
                                        "name": "Identifier",
                                        "src": "6388:9:14"
                                    }
                                ],
                                "id": 2073,
                                "name": "ModifierInvocation",
                                "src": "6388:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1757,
                                                            "type": "uint256",
                                                            "value": "_platformRewardBips"
                                                        },
                                                        "id": 2075,
                                                        "name": "Identifier",
                                                        "src": "6408:19:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 2070,
                                                            "type": "uint256",
                                                            "value": "platformRewardBips"
                                                        },
                                                        "id": 2076,
                                                        "name": "Identifier",
                                                        "src": "6430:18:14"
                                                    }
                                                ],
                                                "id": 2077,
                                                "name": "Assignment",
                                                "src": "6408:40:14"
                                            }
                                        ],
                                        "id": 2078,
                                        "name": "ExpressionStatement",
                                        "src": "6408:40:14"
                                    }
                                ],
                                "id": 2079,
                                "name": "Block",
                                "src": "6398:57:14"
                            }
                        ],
                        "id": 2080,
                        "name": "FunctionDefinition",
                        "src": "6324:131:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "b2551589",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "setPlatformVaultAddress",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "newPlatformVaultAddress",
                                            "scope": 2092,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 2081,
                                                "name": "ElementaryTypeName",
                                                "src": "6494:7:14"
                                            }
                                        ],
                                        "id": 2082,
                                        "name": "VariableDeclaration",
                                        "src": "6494:31:14"
                                    }
                                ],
                                "id": 2083,
                                "name": "ParameterList",
                                "src": "6493:33:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2086,
                                "name": "ParameterList",
                                "src": "6566:0:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 5337,
                                            "type": "modifier ()",
                                            "value": "onlyOwner"
                                        },
                                        "id": 2084,
                                        "name": "Identifier",
                                        "src": "6552:9:14"
                                    }
                                ],
                                "id": 2085,
                                "name": "ModifierInvocation",
                                "src": "6552:9:14"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "address"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 1759,
                                                            "type": "address",
                                                            "value": "_platformVaultAddress"
                                                        },
                                                        "id": 2087,
                                                        "name": "Identifier",
                                                        "src": "6576:21:14"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 2082,
                                                            "type": "address",
                                                            "value": "newPlatformVaultAddress"
                                                        },
                                                        "id": 2088,
                                                        "name": "Identifier",
                                                        "src": "6600:23:14"
                                                    }
                                                ],
                                                "id": 2089,
                                                "name": "Assignment",
                                                "src": "6576:47:14"
                                            }
                                        ],
                                        "id": 2090,
                                        "name": "ExpressionStatement",
                                        "src": "6576:47:14"
                                    }
                                ],
                                "id": 2091,
                                "name": "Block",
                                "src": "6566:64:14"
                            }
                        ],
                        "id": 2092,
                        "name": "FunctionDefinition",
                        "src": "6461:169:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "8456cb59",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "pause",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2093,
                                "name": "ParameterList",
                                "src": "6650:2:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2098,
                                "name": "ParameterList",
                                "src": "6686:0:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 5337,
                                            "type": "modifier ()",
                                            "value": "onlyOwner"
                                        },
                                        "id": 2094,
                                        "name": "Identifier",
                                        "src": "6662:9:14"
                                    }
                                ],
                                "id": 2095,
                                "name": "ModifierInvocation",
                                "src": "6662:9:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 6212,
                                            "type": "modifier ()",
                                            "value": "whenNotPaused"
                                        },
                                        "id": 2096,
                                        "name": "Identifier",
                                        "src": "6672:13:14"
                                    }
                                ],
                                "id": 2097,
                                "name": "ModifierInvocation",
                                "src": "6672:13:14"
                            },
                            {
                                "children": [
                                    {
                                        "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": 6238,
                                                            "type": "function ()",
                                                            "value": "_pause"
                                                        },
                                                        "id": 2099,
                                                        "name": "Identifier",
                                                        "src": "6696:6:14"
                                                    }
                                                ],
                                                "id": 2100,
                                                "name": "FunctionCall",
                                                "src": "6696:8:14"
                                            }
                                        ],
                                        "id": 2101,
                                        "name": "ExpressionStatement",
                                        "src": "6696:8:14"
                                    }
                                ],
                                "id": 2102,
                                "name": "Block",
                                "src": "6686:25:14"
                            }
                        ],
                        "id": 2103,
                        "name": "FunctionDefinition",
                        "src": "6636:75:14"
                    },
                    {
                        "attributes": {
                            "functionSelector": "3f4ba83a",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "name": "unpause",
                            "scope": 2115,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "external"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2104,
                                "name": "ParameterList",
                                "src": "6733:2:14"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 2109,
                                "name": "ParameterList",
                                "src": "6766:0:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 5337,
                                            "type": "modifier ()",
                                            "value": "onlyOwner"
                                        },
                                        "id": 2105,
                                        "name": "Identifier",
                                        "src": "6745:9:14"
                                    }
                                ],
                                "id": 2106,
                                "name": "ModifierInvocation",
                                "src": "6745:9:14"
                            },
                            {
                                "attributes": {},
                                "children": [
                                    {
                                        "attributes": {
                                            "overloadedDeclarations": [
                                                null
                                            ],
                                            "referencedDeclaration": 6222,
                                            "type": "modifier ()",
                                            "value": "whenPaused"
                                        },
                                        "id": 2107,
                                        "name": "Identifier",
                                        "src": "6755:10:14"
                                    }
                                ],
                                "id": 2108,
                                "name": "ModifierInvocation",
                                "src": "6755:10:14"
                            },
                            {
                                "children": [
                                    {
                                        "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": 6254,
                                                            "type": "function ()",
                                                            "value": "_unpause"
                                                        },
                                                        "id": 2110,
                                                        "name": "Identifier",
                                                        "src": "6776:8:14"
                                                    }
                                                ],
                                                "id": 2111,
                                                "name": "FunctionCall",
                                                "src": "6776:10:14"
                                            }
                                        ],
                                        "id": 2112,
                                        "name": "ExpressionStatement",
                                        "src": "6776:10:14"
                                    }
                                ],
                                "id": 2113,
                                "name": "Block",
                                "src": "6766:27:14"
                            }
                        ],
                        "id": 2114,
                        "name": "FunctionDefinition",
                        "src": "6717:76:14"
                    }
                ],
                "id": 2115,
                "name": "ContractDefinition",
                "src": "956:5839:14"
            }
        ],
        "id": 2116,
        "name": "SourceUnit",
        "src": "640:6156:14"
    },
    "compiler": {
        "name": "solc",
        "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.3.3",
    "updatedAt": "2021-02-01T23:13:33.208Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
            },
            "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
            },
            "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
            },
            "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
            },
            "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
            },
            "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
            },
            "name()": {
                "details": "Returns the name of the token."
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "paused()": {
                "details": "Returns true if the contract is paused, and false otherwise."
            },
            "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."
            },
            "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
            },
            "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
            },
            "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
            },
            "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
            },
            "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
    }
}
