{
  "contractName": "DepositAllocater",
  "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": true,
          "internalType": "uint256",
          "name": "checkpointId",
          "type": "uint256"
        }
      ],
      "name": "CheckpointCreated",
      "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"
    },
    {
      "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": "holder",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAt",
      "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": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "deposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "scheduledFor",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalAmountSignaled",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "onlySignaled",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "checkpointId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        }
      ],
      "name": "getHolderSubsetAt",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "checkpointId",
          "type": "uint256"
        }
      ],
      "name": "getHoldersAt",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNumberOfHolders",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "holderCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalAmountSignaledByHolder",
      "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": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "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": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "scheduledFor",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "onlySignaled",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "createDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "updateDepositAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "signalAmount",
          "type": "uint256"
        }
      ],
      "name": "signalAmountForDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        },
        {
          "internalType": "address payable[]",
          "name": "payees",
          "type": "address[]"
        }
      ],
      "name": "pushFundsToAddresses",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        }
      ],
      "name": "claimDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payee",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        }
      ],
      "name": "calculateClaimOnDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        }
      ],
      "name": "getDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "scheduledFor",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalAmountSignaled",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "onlySignaled",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "holder",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "depositId",
          "type": "bytes32"
        }
      ],
      "name": "hasClaimedDeposit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"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\":true,\"internalType\":\"uint256\",\"name\":\"checkpointId\",\"type\":\"uint256\"}],\"name\":\"CheckpointCreated\",\"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\"},{\"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\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"balanceOfAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"}],\"name\":\"calculateClaimOnDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"}],\"name\":\"claimDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"scheduledFor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"onlySignaled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"createDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"scheduledFor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAmountSignaled\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"onlySignaled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"}],\"name\":\"getDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"scheduledFor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAmountSignaled\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"onlySignaled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"checkpointId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"getHolderSubsetAt\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"checkpointId\",\"type\":\"uint256\"}],\"name\":\"getHoldersAt\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumberOfHolders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"}],\"name\":\"hasClaimedDeposit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"holderCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"},{\"internalType\":\"address payable[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"pushFundsToAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"signalAmount\",\"type\":\"uint256\"}],\"name\":\"signalAmountForDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalAmountSignaledByHolder\",\"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\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAt\",\"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\":\"bytes32\",\"name\":\"depositId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"updateDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"abstract contract\",\"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}.\"},\"balanceOfAt(address,uint256)\":{\"params\":{\"holder\":\"Holder to query balance for\",\"timestamp\":\"Timestamp of the balance checkpoint\"}},\"calculateClaimOnDeposit(address,bytes32)\":{\"params\":{\"depositId\":\"Id of the deposit\",\"payee\":\"Address of holder\"},\"returns\":{\"_0\":\"withdrawable amount\"}},\"claimDeposit(bytes32)\":{\"params\":{\"depositId\":\"Id of the deposit\"}},\"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`.\"},\"getDeposit(bytes32)\":{\"returns\":{\"amount\":\"amount\",\"claimedAmount\":\"claimedAmount\",\"onlySignaled\":\"onlySignaled\",\"scheduledFor\":\"scheduledFor\",\"token\":\"token\",\"totalAmountSignaled\":\"totalAmountSignaled\"}},\"getHoldersAt(uint256)\":{\"params\":{\"checkpointId\":\"Checkpoint id at which holder list is to be populated\"},\"returns\":{\"_0\":\"list of holders\"}},\"hasClaimedDeposit(address,bytes32)\":{\"params\":{\"depositId\":\"Id of the deposit\"},\"returns\":{\"_0\":\"bool whether the address has claimed\"}},\"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.\"},\"initialize(string,string)\":{\"details\":\"\\\"constructor\\\" to be called on deployment\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"pushFundsToAddresses(bytes32,address[])\":{\"params\":{\"depositId\":\"Id of the deposit\",\"payees\":\"Addresses to which to push the funds\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"totalSupplyAt(uint256)\":{\"params\":{\"timestamp\":\"Timestamp of the totalSupply checkpoint\"},\"returns\":{\"_0\":\"uint256\"}},\"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`.\"}},\"title\":\"Logic for distributing funds based on checkpointing\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"balanceOfAt(address,uint256)\":{\"notice\":\"Queries the balances of a holder at a specific timestamp\"},\"calculateClaimOnDeposit(address,bytes32)\":{\"notice\":\"Calculate claimable amount of a deposit for a given address\"},\"claimDeposit(bytes32)\":{\"notice\":\"Withdraws the holders share of funds of the deposit\"},\"getDeposit(bytes32)\":{\"notice\":\"Returns params of a deposit\"},\"getHoldersAt(uint256)\":{\"notice\":\"returns an array of holders with non zero balance at a given checkpoint\"},\"hasClaimedDeposit(address,bytes32)\":{\"notice\":\"Checks whether an address has withdrawn funds for a deposit\"},\"initialize(string,string)\":{\"notice\":\"Initialize a new instance storage\"},\"pushFundsToAddresses(bytes32,address[])\":{\"notice\":\"Issuer can push funds to provided addresses\"},\"totalSupplyAt(uint256)\":{\"notice\":\"Queries totalSupply at a specific timestamp\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocater.sol\":\"DepositAllocater\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/Checkpoint/Checkpoint.sol\":{\"keccak256\":\"0xece3763697d7adc64207d921125eefa45f1ecf0e66d372a985efa5279b16e7bb\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d5a3fdc8bd568e92f6f0c8f46bc2e3727911e580f9d3f3625b01af5ef8913710\",\"dweb:/ipfs/QmXXSt5oq8oxYXVHeXGnawCUDgQ1cA7zhsbz4VDYd6FnFN\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/Checkpoint/CheckpointStorage.sol\":{\"keccak256\":\"0x7e5c553e1ff9d469c2f732f34ea25fa709e2711ff2e2259ff1472bb89208e558\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c2f3706e10d710c658700fc26a7be1ee31b2a982f1f7856e559f3b5ca088ea6\",\"dweb:/ipfs/QmTcuAa1M8BqVBKaKubrf7RunMC99uzmmKK1YRWqNFwnpY\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedToken.sol\":{\"keccak256\":\"0x163e8304a5552d583f78fa902525fe768d8edd24c54f3d0e65d7cf2c05fe57b8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fe7a580fe4a241a5057e945d09ca4bbe0298ab0e11477b89fd5d353031b83364\",\"dweb:/ipfs/QmSh4P7ysYwmVvmnMT1GwnJy9sghfRJGaBY4nXbLEuvVDW\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedTokenStorage.sol\":{\"keccak256\":\"0x5dc109b8a927dd9e7c2dd14c7546d8b791490a3b7b129b68987ee47fc2894513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e8fccad6b9cf0375093cdc024014ee1829d05e8c1c8858e17771d6d1728998a\",\"dweb:/ipfs/QmUnCaQBp927wwLm5XmLpUbpQoLDKgDDDmq3WZ8avQzWBc\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocater.sol\":{\"keccak256\":\"0xdb56d7ae844407da9cecf68607d1c3d44242fb8c3a332e9a0a984eb3b08da04e\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0d5b44879663c7de0d7e0493b014f0ae5b9b6c8e2d1dba6cf2c017d738389a8f\",\"dweb:/ipfs/Qmb2atkghZ9sM67Lknvr5JXjiN7GFJr9shzH3FiMC3Wpxu\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocaterStorage.sol\":{\"keccak256\":\"0xa1759a7544fae68f08463eeee61c0242f92ebc1d81a093c16168d003cb6a2b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://858e360a4cb03b68745940e54c6bc313a700459d60dd47ac84d280374af6c68f\",\"dweb:/ipfs/QmZbUJgyeRpmce467ZJVBRgk7goXxpnUiiEiDdyPK2A6ek\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0xe81686511d62f18b2d9c693c2c94c0a789c690de63aa90e15451ebf65c5bfd3e\",\"urls\":[\"bzz-raw://1332ee1d2b096456bf2e5795b5871d0fed47be6a31c9a2f2cef9206a299565ea\",\"dweb:/ipfs/Qmdu1847Y4UL3gTjbLUManMGfxYEoyGPSodM3Br89SKzwx\"]},\"@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]},\"@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x04d34b3cd5677bea25f8dfceb6dec0eaa071d4d4b789a43f13fe0c415ba4c296\",\"urls\":[\"bzz-raw://e7e8b526a6839e5ba14f0d23a830387fec47f7043ce01d42c9f285b709a9d080\",\"dweb:/ipfs/QmXmhhFmX5gcAvVzNiDPAGA35iHMPNaYtQkACswRHBVTNw\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x9c2d859bc9de93ced0875d226598e56067fe4d6b2dde0e1fd53ca60fa9603db0\",\"urls\":[\"bzz-raw://5df1baba4ea42a94d0e0aed4a87271369ef2cd54d86e89cab7ef1428ff387210\",\"dweb:/ipfs/QmV5ErriAFQWqEPAfWhJ6DxmujH6vBPB3F5Breaq9vUWGu\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x75a600e5ed3443ecf3b7fb636064b404b358317fd6cd91e70e3ca5cf2370e882\",\"urls\":[\"bzz-raw://5916e664a17b3fdbdc311579705bad74f433769c340346c371db2ecfa8427d24\",\"dweb:/ipfs/QmYNLuiPo4iRPWFJriVgqPELRUrFBFLpp5YnMMmqQ8zhBh\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506125b6806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80634ee2cd7e116100f957806395d89b4111610097578063a9059cbb11610071578063a9059cbb146103bf578063a999b73f146103d2578063c20662c3146103e5578063dd62ed3e146103f8576101c4565b806395d89b4114610391578063981b24d014610399578063a457c2d7146103ac576101c4565b806370a08231116100d357806370a082311461033357806376fa0e46146103465780637a22402c146103595780637a86983f1461036c576101c4565b80634ee2cd7e146102fa578063520fdd221461030d5780635e58588914610320576101c4565b8063302424ea116101665780633180192511610140578063318019251461028f57806339509351146102af5780633d4dff7b146102c25780634cd88b76146102e7576101c4565b8063302424ea1461025f578063308feec314610272578063313ce5671461027a576101c4565b806318160ddd116101a257806318160ddd1461021c5780631aab9a9f1461023157806323b872dd146102395780632839a1841461024c576101c4565b806303952a7a146101c957806306fdde03146101de578063095ea7b3146101fc575b600080fd5b6101dc6101d7366004611db2565b61040b565b005b6101e6610633565b6040516101f39190611f19565b60405180910390f35b61020f61020a366004611c9c565b6106ca565b6040516101f39190611f0e565b6102246106e8565b6040516101f39190612426565b6102246106ee565b61020f610247366004611c5c565b6106f4565b61022461025a366004611c08565b610781565b6101dc61026d366004611dd3565b610793565b6102246107ff565b610282610805565b6040516101f39190612495565b6102a261029d366004611e7d565b61080e565b6040516101f39190611ec1565b61020f6102bd366004611c9c565b610a25565b6102d56102d0366004611ce3565b610a79565b6040516101f39695949392919061242f565b6101dc6102f5366004611e1c565b610abd565b610224610308366004611c9c565b610b4c565b6102a261031b366004611ce3565b610b75565b6101dc61032e366004611ce3565b610d29565b610224610341366004611c08565b610d77565b61020f610354366004611c9c565b610d92565b610224610367366004611c9c565b610dc0565b61037f61037a366004611ce3565b610ea6565b6040516101f396959493929190612462565b6101e6610eea565b6102246103a7366004611ce3565b610f4b565b61020f6103ba366004611c9c565b610f58565b61020f6103cd366004611c9c565b610fc6565b6101dc6103e0366004611db2565b610fda565b6101dc6103f3366004611cfb565b61102f565b610224610406366004611c24565b6110b1565b600082815260a66020526040902080546104405760405162461bcd60e51b8152600401610437906121a3565b60405180910390fd5b6004810154600160a01b900460ff1615156001146104705760405162461bcd60e51b815260040161043790611faf565b805442106104905760405162461bcd60e51b815260040161043790612311565b61049a3342610b4c565b33600090815260a7602052604090205411156104c85760405162461bcd60e51b81526004016104379061235c565b8161050f5733600090815260068201602090815260408083205460a7909252909120546104fa9163ffffffff6110dc16565b33600090815260a760205260409020556105db565b3360009081526006820160205260409020548210156105835733600090815260068201602052604081205461054a908463ffffffff6110dc16565b33600090815260a7602052604090205490915061056d908263ffffffff6110dc16565b33600090815260a76020526040902055506105db565b3360009081526006820160205260408120546105a690849063ffffffff6110dc16565b33600090815260a760205260409020549091506105c9908263ffffffff61111e16565b33600090815260a76020526040902055505b33600090815260068201602052604090205460038201546106019163ffffffff6110dc16565b60038201819055610618908363ffffffff61111e16565b60038201553360009081526006909101602052604090205550565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bf5780601f10610694576101008083540402835291602001916106bf565b820191906000526020600020905b8154815290600101906020018083116106a257829003601f168201915b505050505090505b90565b60006106de6106d7611143565b8484611147565b5060015b92915050565b60675490565b609b5481565b60006107018484846111fb565b6107778461070d611143565b61077285604051806060016040528060288152602001612534602891396001600160a01b038a1660009081526066602052604081209061074b611143565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61121116565b611147565b5060019392505050565b60a76020526000908152604090205481565b600084815260a6602052604090208054156107c05760405162461bcd60e51b8152600401610437906120c8565b9283556004909201805460ff60a01b1916600160a01b92151592909202919091176001600160a01b0319166001600160a01b0390921691909117905550565b60995490565b606a5460ff1690565b6099546060908083106108235783900361082b565b506001838303015b60608167ffffffffffffffff8111801561084457600080fd5b5060405190808252806020026020018201604052801561086e578160200160208202803683370190505b50905060005b828110156108d55760998682018154811061088b57fe5b9060005260206000200160009054906101000a90046001600160a01b03168282815181106108b557fe5b6001600160a01b0390921660209283029190910190910152600101610874565b506000805b825181101561094a5760006109028483815181106108f457fe5b60200260200101518a610b4c565b111561091357600190910190610942565b600083828151811061092157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001016108da565b60608267ffffffffffffffff8111801561096357600080fd5b5060405190808252806020026020018201604052801561098d578160200160208202803683370190505b50905060009250600091505b8351821015610a195760006001600160a01b03168483815181106109b957fe5b60200260200101516001600160a01b031614610a0e578382815181106109db57fe5b60200260200101518184815181106109ef57fe5b6001600160a01b03909216602092830291909101909101526001909201915b600190910190610999565b98975050505050505050565b60006106de610a32611143565b846107728560666000610a43611143565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61111e16565b60a66020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b03811690600160a01b900460ff1686565b600054610100900460ff1680610ad65750610ad661123d565b80610ae4575060005460ff16155b610b005760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff16158015610b2b576000805460ff1961ff0019909116610100171660011790555b610b358383611243565b8015610b47576000805461ff00191690555b505050565b6001600160a01b0382166000908152609860205260408120610b6e90836112c3565b9392505050565b606060008060606099805480602002602001604051908101604052809291908181526020018280548015610bd257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb4575b50505050509050600091505b8051821015610c51576000610c06828481518110610bf857fe5b602002602001015187610b4c565b1115610c1757600190920191610c46565b6000818381518110610c2557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600190910190610bde565b60608367ffffffffffffffff81118015610c6a57600080fd5b50604051908082528060200260200182016040528015610c94578160200160208202803683370190505b50905060009350600092505b8151831015610d205760006001600160a01b0316828481518110610cc057fe5b60200260200101516001600160a01b031614610d1557818381518110610ce257fe5b6020026020010151818581518110610cf657fe5b6001600160a01b03909216602092830291909101909101526001909301925b600190920191610ca0565b95945050505050565b600081815260a660209081526040808320338452600581019092529091205460ff1615610d685760405162461bcd60e51b815260040161043790612115565b610d733382846113ef565b5050565b6001600160a01b031660009081526065602052604090205490565b600090815260a6602090815260408083206001600160a01b0394909416835260059093019052205460ff1690565b600081815260a6602090815260408083206001600160a01b03861684526005810190925282205460ff1615610df95760009150506106e2565b6000610e088260000154610f4b565b6004830154909150600090600160a01b900460ff16610e3457610e2f868460000154610b4c565b610e50565b6001600160a01b03861660009081526006840160205260409020545b90506000610e9b8460040160149054906101000a900460ff16610e735783610e79565b84600301545b6001860154610e8f90859063ffffffff61157316565b9063ffffffff6115ad16565b979650505050505050565b600090815260a6602052604090208054600182015460028301546003840154600490940154929491939092909160ff600160a01b830416916001600160a01b031690565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bf5780601f10610694576101008083540402835291602001916106bf565b60006106e26097836112c3565b60006106de610f65611143565b846107728560405180606001604052806025815260200161255c6025913960666000610f8f611143565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61121116565b60006106de610fd3611143565b84846111fb565b600082815260a66020526040902080546110065760405162461bcd60e51b815260040161043790612235565b6001810154156110285760405162461bcd60e51b815260040161043790611ff2565b6001015550565b600082815260a660205260408120905b82518110156110ab5781600501600084838151811061105a57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff166110a3576110a383828151811061109457fe5b602002602001015183866113ef565b60010161103f565b50505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6000610b6e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611211565b600082820183811015610b6e5760405162461bcd60e51b815260040161043790612091565b3390565b6001600160a01b03831661116d5760405162461bcd60e51b8152600401610437906122cd565b6001600160a01b0382166111935760405162461bcd60e51b81526004016104379061204f565b6001600160a01b0380841660008181526066602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111ee908590612426565b60405180910390a3505050565b6112068383836115ef565b610b47838383611710565b600081848411156112355760405162461bcd60e51b81526004016104379190611f19565b505050900390565b303b1590565b600054610100900460ff168061125c575061125c61123d565b8061126a575060005460ff16155b6112865760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff161580156112b1576000805460ff1961ff0019909116610100171660011790555b6112b9611735565b610b3583836117b8565b81546000906112d4575060006106e2565b8254839060001981019081106112e657fe5b60009182526020909120600290910201546001600160801b031682106113315782548390600019810190811061131857fe5b90600052602060002090600202016001015490506106e2565b8260008154811061133e57fe5b60009182526020909120600290910201546001600160801b0316821015611367575060006106e2565b8254600090600019015b818111156113c757600060026001838501010490508486828154811061139357fe5b60009182526020909120600290910201546001600160801b0316116113ba578092506113c1565b6001810391505b50611371565b8482815481106113d357fe5b9060005260206000209060020201600101549250505092915050565b60b25460ff166114115760405162461bcd60e51b8152600401610437906123a7565b60b2805460ff1916905560006114278483610dc0565b6001600160a01b03851660009081526005850160205260409020805460ff19166001179055600284015490915061146590829063ffffffff61111e16565b60028401556001600160a01b038416600090815260068401602090815260408083205460a7909252909120546114a09163ffffffff6110dc16565b6001600160a01b038516600090815260a7602052604090205580156115605760048084015460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916114f2918891869101611ea8565b602060405180830381600087803b15801561150c57600080fd5b505af1158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190611cc7565b6115605760405162461bcd60e51b8152600401610437906123de565b505060b2805460ff191660011790555050565b600082611582575060006106e2565b8282028284828161158f57fe5b0414610b6e5760405162461bcd60e51b815260040161043790612162565b6000610b6e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611871565b6001600160a01b0383166116155760405162461bcd60e51b815260040161043790612288565b6001600160a01b03821661163b5760405162461bcd60e51b815260040161043790611f6c565b611646838383610b47565b6116898160405180606001604052806026815260200161250e602691396001600160a01b038616600090815260656020526040902054919063ffffffff61121116565b6001600160a01b0380851660009081526065602052604080822093909355908416815220546116be908263ffffffff61111e16565b6001600160a01b0380841660008181526065602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111ee908590612426565b61171b8383836118a8565b6117236119a7565b61172c836119bb565b610b47826119bb565b600054610100900460ff168061174e575061174e61123d565b8061175c575060005460ff16155b6117785760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff161580156117a3576000805460ff1961ff0019909116610100171660011790555b80156117b5576000805461ff00191690555b50565b600054610100900460ff16806117d157506117d161123d565b806117df575060005460ff16155b6117fb5760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff16158015611826576000805460ff1961ff0019909116610100171660011790555b8251611839906068906020860190611afc565b50815161184d906069906020850190611afc565b50606a805460ff191660121790558015610b47576000805461ff0019169055505050565b600081836118925760405162461bcd60e51b81526004016104379190611f19565b50600083858161189e57fe5b0495945050505050565b8015806118c65750816001600160a01b0316836001600160a01b0316145b156118d057610b47565b6118d982610d77565b1580156118ee57506001600160a01b03821615155b1561197b57609b5461190790600163ffffffff61111e16565b609b55611913826119e0565b61197b576099805460018082019092557f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b0385169081179091556000908152609a60205260409020805460ff191690911790555b61198483610d77565b811415610b4757609b5461199f90600163ffffffff6110dc16565b609b55505050565b6119b960976119b46106e8565b6119fe565b565b6001600160a01b03811660009081526098602052604090206117b5906119b483610d77565b6001600160a01b03166000908152609a602052604090205460ff1690565b81541580611a365750815482906000198101908110611a1957fe5b60009182526020909120600290910201546001600160801b031642115b15611acc57604080518082018252426001600160801b039081168252602080830185815286546001808201895560008981529384209551600290920290950180546fffffffffffffffffffffffffffffffff1916919094161783555191909201558354915160001992909201917f76735e462dae5480c552f970568dc60e35cc3c4c06eb818f77bbb357593bf7fa9190a2610d73565b815460009083906000198101908110611ae157fe5b60009182526020909120600160029092020101829055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b3d57805160ff1916838001178555611b6a565b82800160010185558215611b6a579182015b82811115611b6a578251825591602001919060010190611b4f565b50611b76929150611b7a565b5090565b6106c791905b80821115611b765760008155600101611b80565b80356106e2816124ca565b600082601f830112611baf578081fd5b813567ffffffffffffffff811115611bc5578182fd5b611bd8601f8201601f19166020016124a3565b9150808252836020828501011115611bef57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611c19578081fd5b8135610b6e816124ca565b60008060408385031215611c36578081fd5b8235611c41816124ca565b91506020830135611c51816124ca565b809150509250929050565b600080600060608486031215611c70578081fd5b8335611c7b816124ca565b92506020840135611c8b816124ca565b929592945050506040919091013590565b60008060408385031215611cae578182fd5b8235611cb9816124ca565b946020939093013593505050565b600060208284031215611cd8578081fd5b8151610b6e816124df565b600060208284031215611cf4578081fd5b5035919050565b60008060408385031215611d0d578182fd5b8235915060208084013567ffffffffffffffff80821115611d2c578384fd5b81860187601f820112611d3d578485fd5b8035925081831115611d4d578485fd5b8383029150611d5d8483016124a3565b8381528481019082860184840187018b1015611d77578788fd5b8794505b85851015611da157611d8d8b82611b94565b835260019490940193918601918601611d7b565b508096505050505050509250929050565b60008060408385031215611dc4578182fd5b50508035926020909101359150565b60008060008060808587031215611de8578081fd5b84359350602085013592506040850135611e01816124df565b91506060850135611e11816124ca565b939692955090935050565b60008060408385031215611e2e578182fd5b823567ffffffffffffffff80821115611e45578384fd5b611e5186838701611b9f565b93506020850135915080821115611e66578283fd5b50611e7385828601611b9f565b9150509250929050565b600080600060608486031215611e91578283fd5b505081359360208301359350604090920135919050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611f025783516001600160a01b031683529284019291840191600101611edd565b50909695505050505050565b901515815260200190565b6000602080835283518082850152825b81811015611f4557858101830151858201604001528201611f29565b81811115611f565783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526035908201526000805160206124ee83398151915260408201527414d251d39053125391d7d393d517d1539050931151605a1b606082015260800190565b60208082526037908201527f4465706f7369742e7570646174654465706f736974416d6f756e743a2044455060408201527f4f5349545f414d4f554e545f414c52454144595f534554000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602d908201527f4465706f7369742e6372656174654465706f7369743a204445504f5349545f4160408201526c4c52454144595f45584953545360981b606082015260800190565b6020808252602d908201527f4465706f7369742e636c61696d4465706f7369743a204445504f5349545f414c60408201526c149150511657d0d31052535151609a1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526036908201526000805160206124ee83398151915260408201527511115413d4d25517d113d154d7d393d517d1561254d560521b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526033908201527f4465706f7369742e7570646174654465706f736974416d6f756e743a2044455060408201527213d4d25517d113d154d7d393d517d1561254d5606a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252603c908201526000805160206124ee83398151915260408201527f4445504f5349545f49535f414c52454144595f50524f43455353454400000000606082015260800190565b6020808252603d908201526000805160206124ee83398151915260408201527f5349474e414c5f414d4f554e545f455843454544535f42414c414e4345000000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526028908201527f4465706f7369742e7472616e736665724465706f7369743a205452414e5346456040820152671497d1905253115160c21b606082015260800190565b90815260200190565b9586526020860194909452604085019290925260608401526001600160a01b03166080830152151560a082015260c00190565b958652602086019490945260408501929092526060840152151560808301526001600160a01b031660a082015260c00190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156124c257600080fd5b604052919050565b6001600160a01b03811681146117b557600080fd5b80151581146117b557600080fdfe4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a2045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220511caad1624c827345b7ef4d572dd72dc7ea8bd5170897167ead74eae3ee081164736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80634ee2cd7e116100f957806395d89b4111610097578063a9059cbb11610071578063a9059cbb146103bf578063a999b73f146103d2578063c20662c3146103e5578063dd62ed3e146103f8576101c4565b806395d89b4114610391578063981b24d014610399578063a457c2d7146103ac576101c4565b806370a08231116100d357806370a082311461033357806376fa0e46146103465780637a22402c146103595780637a86983f1461036c576101c4565b80634ee2cd7e146102fa578063520fdd221461030d5780635e58588914610320576101c4565b8063302424ea116101665780633180192511610140578063318019251461028f57806339509351146102af5780633d4dff7b146102c25780634cd88b76146102e7576101c4565b8063302424ea1461025f578063308feec314610272578063313ce5671461027a576101c4565b806318160ddd116101a257806318160ddd1461021c5780631aab9a9f1461023157806323b872dd146102395780632839a1841461024c576101c4565b806303952a7a146101c957806306fdde03146101de578063095ea7b3146101fc575b600080fd5b6101dc6101d7366004611db2565b61040b565b005b6101e6610633565b6040516101f39190611f19565b60405180910390f35b61020f61020a366004611c9c565b6106ca565b6040516101f39190611f0e565b6102246106e8565b6040516101f39190612426565b6102246106ee565b61020f610247366004611c5c565b6106f4565b61022461025a366004611c08565b610781565b6101dc61026d366004611dd3565b610793565b6102246107ff565b610282610805565b6040516101f39190612495565b6102a261029d366004611e7d565b61080e565b6040516101f39190611ec1565b61020f6102bd366004611c9c565b610a25565b6102d56102d0366004611ce3565b610a79565b6040516101f39695949392919061242f565b6101dc6102f5366004611e1c565b610abd565b610224610308366004611c9c565b610b4c565b6102a261031b366004611ce3565b610b75565b6101dc61032e366004611ce3565b610d29565b610224610341366004611c08565b610d77565b61020f610354366004611c9c565b610d92565b610224610367366004611c9c565b610dc0565b61037f61037a366004611ce3565b610ea6565b6040516101f396959493929190612462565b6101e6610eea565b6102246103a7366004611ce3565b610f4b565b61020f6103ba366004611c9c565b610f58565b61020f6103cd366004611c9c565b610fc6565b6101dc6103e0366004611db2565b610fda565b6101dc6103f3366004611cfb565b61102f565b610224610406366004611c24565b6110b1565b600082815260a66020526040902080546104405760405162461bcd60e51b8152600401610437906121a3565b60405180910390fd5b6004810154600160a01b900460ff1615156001146104705760405162461bcd60e51b815260040161043790611faf565b805442106104905760405162461bcd60e51b815260040161043790612311565b61049a3342610b4c565b33600090815260a7602052604090205411156104c85760405162461bcd60e51b81526004016104379061235c565b8161050f5733600090815260068201602090815260408083205460a7909252909120546104fa9163ffffffff6110dc16565b33600090815260a760205260409020556105db565b3360009081526006820160205260409020548210156105835733600090815260068201602052604081205461054a908463ffffffff6110dc16565b33600090815260a7602052604090205490915061056d908263ffffffff6110dc16565b33600090815260a76020526040902055506105db565b3360009081526006820160205260408120546105a690849063ffffffff6110dc16565b33600090815260a760205260409020549091506105c9908263ffffffff61111e16565b33600090815260a76020526040902055505b33600090815260068201602052604090205460038201546106019163ffffffff6110dc16565b60038201819055610618908363ffffffff61111e16565b60038201553360009081526006909101602052604090205550565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bf5780601f10610694576101008083540402835291602001916106bf565b820191906000526020600020905b8154815290600101906020018083116106a257829003601f168201915b505050505090505b90565b60006106de6106d7611143565b8484611147565b5060015b92915050565b60675490565b609b5481565b60006107018484846111fb565b6107778461070d611143565b61077285604051806060016040528060288152602001612534602891396001600160a01b038a1660009081526066602052604081209061074b611143565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61121116565b611147565b5060019392505050565b60a76020526000908152604090205481565b600084815260a6602052604090208054156107c05760405162461bcd60e51b8152600401610437906120c8565b9283556004909201805460ff60a01b1916600160a01b92151592909202919091176001600160a01b0319166001600160a01b0390921691909117905550565b60995490565b606a5460ff1690565b6099546060908083106108235783900361082b565b506001838303015b60608167ffffffffffffffff8111801561084457600080fd5b5060405190808252806020026020018201604052801561086e578160200160208202803683370190505b50905060005b828110156108d55760998682018154811061088b57fe5b9060005260206000200160009054906101000a90046001600160a01b03168282815181106108b557fe5b6001600160a01b0390921660209283029190910190910152600101610874565b506000805b825181101561094a5760006109028483815181106108f457fe5b60200260200101518a610b4c565b111561091357600190910190610942565b600083828151811061092157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001016108da565b60608267ffffffffffffffff8111801561096357600080fd5b5060405190808252806020026020018201604052801561098d578160200160208202803683370190505b50905060009250600091505b8351821015610a195760006001600160a01b03168483815181106109b957fe5b60200260200101516001600160a01b031614610a0e578382815181106109db57fe5b60200260200101518184815181106109ef57fe5b6001600160a01b03909216602092830291909101909101526001909201915b600190910190610999565b98975050505050505050565b60006106de610a32611143565b846107728560666000610a43611143565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61111e16565b60a66020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b03811690600160a01b900460ff1686565b600054610100900460ff1680610ad65750610ad661123d565b80610ae4575060005460ff16155b610b005760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff16158015610b2b576000805460ff1961ff0019909116610100171660011790555b610b358383611243565b8015610b47576000805461ff00191690555b505050565b6001600160a01b0382166000908152609860205260408120610b6e90836112c3565b9392505050565b606060008060606099805480602002602001604051908101604052809291908181526020018280548015610bd257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb4575b50505050509050600091505b8051821015610c51576000610c06828481518110610bf857fe5b602002602001015187610b4c565b1115610c1757600190920191610c46565b6000818381518110610c2557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600190910190610bde565b60608367ffffffffffffffff81118015610c6a57600080fd5b50604051908082528060200260200182016040528015610c94578160200160208202803683370190505b50905060009350600092505b8151831015610d205760006001600160a01b0316828481518110610cc057fe5b60200260200101516001600160a01b031614610d1557818381518110610ce257fe5b6020026020010151818581518110610cf657fe5b6001600160a01b03909216602092830291909101909101526001909301925b600190920191610ca0565b95945050505050565b600081815260a660209081526040808320338452600581019092529091205460ff1615610d685760405162461bcd60e51b815260040161043790612115565b610d733382846113ef565b5050565b6001600160a01b031660009081526065602052604090205490565b600090815260a6602090815260408083206001600160a01b0394909416835260059093019052205460ff1690565b600081815260a6602090815260408083206001600160a01b03861684526005810190925282205460ff1615610df95760009150506106e2565b6000610e088260000154610f4b565b6004830154909150600090600160a01b900460ff16610e3457610e2f868460000154610b4c565b610e50565b6001600160a01b03861660009081526006840160205260409020545b90506000610e9b8460040160149054906101000a900460ff16610e735783610e79565b84600301545b6001860154610e8f90859063ffffffff61157316565b9063ffffffff6115ad16565b979650505050505050565b600090815260a6602052604090208054600182015460028301546003840154600490940154929491939092909160ff600160a01b830416916001600160a01b031690565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106bf5780601f10610694576101008083540402835291602001916106bf565b60006106e26097836112c3565b60006106de610f65611143565b846107728560405180606001604052806025815260200161255c6025913960666000610f8f611143565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61121116565b60006106de610fd3611143565b84846111fb565b600082815260a66020526040902080546110065760405162461bcd60e51b815260040161043790612235565b6001810154156110285760405162461bcd60e51b815260040161043790611ff2565b6001015550565b600082815260a660205260408120905b82518110156110ab5781600501600084838151811061105a57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff166110a3576110a383828151811061109457fe5b602002602001015183866113ef565b60010161103f565b50505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6000610b6e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611211565b600082820183811015610b6e5760405162461bcd60e51b815260040161043790612091565b3390565b6001600160a01b03831661116d5760405162461bcd60e51b8152600401610437906122cd565b6001600160a01b0382166111935760405162461bcd60e51b81526004016104379061204f565b6001600160a01b0380841660008181526066602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906111ee908590612426565b60405180910390a3505050565b6112068383836115ef565b610b47838383611710565b600081848411156112355760405162461bcd60e51b81526004016104379190611f19565b505050900390565b303b1590565b600054610100900460ff168061125c575061125c61123d565b8061126a575060005460ff16155b6112865760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff161580156112b1576000805460ff1961ff0019909116610100171660011790555b6112b9611735565b610b3583836117b8565b81546000906112d4575060006106e2565b8254839060001981019081106112e657fe5b60009182526020909120600290910201546001600160801b031682106113315782548390600019810190811061131857fe5b90600052602060002090600202016001015490506106e2565b8260008154811061133e57fe5b60009182526020909120600290910201546001600160801b0316821015611367575060006106e2565b8254600090600019015b818111156113c757600060026001838501010490508486828154811061139357fe5b60009182526020909120600290910201546001600160801b0316116113ba578092506113c1565b6001810391505b50611371565b8482815481106113d357fe5b9060005260206000209060020201600101549250505092915050565b60b25460ff166114115760405162461bcd60e51b8152600401610437906123a7565b60b2805460ff1916905560006114278483610dc0565b6001600160a01b03851660009081526005850160205260409020805460ff19166001179055600284015490915061146590829063ffffffff61111e16565b60028401556001600160a01b038416600090815260068401602090815260408083205460a7909252909120546114a09163ffffffff6110dc16565b6001600160a01b038516600090815260a7602052604090205580156115605760048084015460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916114f2918891869101611ea8565b602060405180830381600087803b15801561150c57600080fd5b505af1158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190611cc7565b6115605760405162461bcd60e51b8152600401610437906123de565b505060b2805460ff191660011790555050565b600082611582575060006106e2565b8282028284828161158f57fe5b0414610b6e5760405162461bcd60e51b815260040161043790612162565b6000610b6e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611871565b6001600160a01b0383166116155760405162461bcd60e51b815260040161043790612288565b6001600160a01b03821661163b5760405162461bcd60e51b815260040161043790611f6c565b611646838383610b47565b6116898160405180606001604052806026815260200161250e602691396001600160a01b038616600090815260656020526040902054919063ffffffff61121116565b6001600160a01b0380851660009081526065602052604080822093909355908416815220546116be908263ffffffff61111e16565b6001600160a01b0380841660008181526065602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111ee908590612426565b61171b8383836118a8565b6117236119a7565b61172c836119bb565b610b47826119bb565b600054610100900460ff168061174e575061174e61123d565b8061175c575060005460ff16155b6117785760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff161580156117a3576000805460ff1961ff0019909116610100171660011790555b80156117b5576000805461ff00191690555b50565b600054610100900460ff16806117d157506117d161123d565b806117df575060005460ff16155b6117fb5760405162461bcd60e51b8152600401610437906121e7565b600054610100900460ff16158015611826576000805460ff1961ff0019909116610100171660011790555b8251611839906068906020860190611afc565b50815161184d906069906020850190611afc565b50606a805460ff191660121790558015610b47576000805461ff0019169055505050565b600081836118925760405162461bcd60e51b81526004016104379190611f19565b50600083858161189e57fe5b0495945050505050565b8015806118c65750816001600160a01b0316836001600160a01b0316145b156118d057610b47565b6118d982610d77565b1580156118ee57506001600160a01b03821615155b1561197b57609b5461190790600163ffffffff61111e16565b609b55611913826119e0565b61197b576099805460018082019092557f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b0385169081179091556000908152609a60205260409020805460ff191690911790555b61198483610d77565b811415610b4757609b5461199f90600163ffffffff6110dc16565b609b55505050565b6119b960976119b46106e8565b6119fe565b565b6001600160a01b03811660009081526098602052604090206117b5906119b483610d77565b6001600160a01b03166000908152609a602052604090205460ff1690565b81541580611a365750815482906000198101908110611a1957fe5b60009182526020909120600290910201546001600160801b031642115b15611acc57604080518082018252426001600160801b039081168252602080830185815286546001808201895560008981529384209551600290920290950180546fffffffffffffffffffffffffffffffff1916919094161783555191909201558354915160001992909201917f76735e462dae5480c552f970568dc60e35cc3c4c06eb818f77bbb357593bf7fa9190a2610d73565b815460009083906000198101908110611ae157fe5b60009182526020909120600160029092020101829055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611b3d57805160ff1916838001178555611b6a565b82800160010185558215611b6a579182015b82811115611b6a578251825591602001919060010190611b4f565b50611b76929150611b7a565b5090565b6106c791905b80821115611b765760008155600101611b80565b80356106e2816124ca565b600082601f830112611baf578081fd5b813567ffffffffffffffff811115611bc5578182fd5b611bd8601f8201601f19166020016124a3565b9150808252836020828501011115611bef57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215611c19578081fd5b8135610b6e816124ca565b60008060408385031215611c36578081fd5b8235611c41816124ca565b91506020830135611c51816124ca565b809150509250929050565b600080600060608486031215611c70578081fd5b8335611c7b816124ca565b92506020840135611c8b816124ca565b929592945050506040919091013590565b60008060408385031215611cae578182fd5b8235611cb9816124ca565b946020939093013593505050565b600060208284031215611cd8578081fd5b8151610b6e816124df565b600060208284031215611cf4578081fd5b5035919050565b60008060408385031215611d0d578182fd5b8235915060208084013567ffffffffffffffff80821115611d2c578384fd5b81860187601f820112611d3d578485fd5b8035925081831115611d4d578485fd5b8383029150611d5d8483016124a3565b8381528481019082860184840187018b1015611d77578788fd5b8794505b85851015611da157611d8d8b82611b94565b835260019490940193918601918601611d7b565b508096505050505050509250929050565b60008060408385031215611dc4578182fd5b50508035926020909101359150565b60008060008060808587031215611de8578081fd5b84359350602085013592506040850135611e01816124df565b91506060850135611e11816124ca565b939692955090935050565b60008060408385031215611e2e578182fd5b823567ffffffffffffffff80821115611e45578384fd5b611e5186838701611b9f565b93506020850135915080821115611e66578283fd5b50611e7385828601611b9f565b9150509250929050565b600080600060608486031215611e91578283fd5b505081359360208301359350604090920135919050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611f025783516001600160a01b031683529284019291840191600101611edd565b50909695505050505050565b901515815260200190565b6000602080835283518082850152825b81811015611f4557858101830151858201604001528201611f29565b81811115611f565783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526035908201526000805160206124ee83398151915260408201527414d251d39053125391d7d393d517d1539050931151605a1b606082015260800190565b60208082526037908201527f4465706f7369742e7570646174654465706f736974416d6f756e743a2044455060408201527f4f5349545f414d4f554e545f414c52454144595f534554000000000000000000606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602d908201527f4465706f7369742e6372656174654465706f7369743a204445504f5349545f4160408201526c4c52454144595f45584953545360981b606082015260800190565b6020808252602d908201527f4465706f7369742e636c61696d4465706f7369743a204445504f5349545f414c60408201526c149150511657d0d31052535151609a1b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526036908201526000805160206124ee83398151915260408201527511115413d4d25517d113d154d7d393d517d1561254d560521b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526033908201527f4465706f7369742e7570646174654465706f736974416d6f756e743a2044455060408201527213d4d25517d113d154d7d393d517d1561254d5606a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252603c908201526000805160206124ee83398151915260408201527f4445504f5349545f49535f414c52454144595f50524f43455353454400000000606082015260800190565b6020808252603d908201526000805160206124ee83398151915260408201527f5349474e414c5f414d4f554e545f455843454544535f42414c414e4345000000606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526028908201527f4465706f7369742e7472616e736665724465706f7369743a205452414e5346456040820152671497d1905253115160c21b606082015260800190565b90815260200190565b9586526020860194909452604085019290925260608401526001600160a01b03166080830152151560a082015260c00190565b958652602086019490945260408501929092526060840152151560808301526001600160a01b031660a082015260c00190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156124c257600080fd5b604052919050565b6001600160a01b03811681146117b557600080fd5b80151581146117b557600080fdfe4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a2045524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220511caad1624c827345b7ef4d572dd72dc7ea8bd5170897167ead74eae3ee081164736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "544:7160:62:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "544:7160:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1574:1915;;;;;;:::i;:::-;;:::i;:::-;;2469:81:111;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4505:166;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3512:98::-;;;:::i;:::-;;;;;;;:::i;460:26:61:-;;;:::i;5131:317:111:-;;;;;;:::i;:::-;;:::i;1152:62:63:-;;;;;;:::i;:::-;;:::i;685:426:62:-;;;;;;:::i;:::-;;:::i;2577:97:60:-;;;:::i;3371:81:111:-;;;:::i;:::-;;;;;;;:::i;1500:1071:60:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5843:215:111:-;;;;;;:::i;:::-;;:::i;1103:43:63:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;425:124:60:-;;;;;;:::i;:::-;;:::i;2877:158::-;;;;;;:::i;:::-;;:::i;770:724::-;;;;;;:::i;:::-;;:::i;4184:307:62:-;;;;;;:::i;:::-;;:::i;3668:117:111:-;;;;;;:::i;:::-;;:::i;7552:150:62:-;;;;;;:::i;:::-;;:::i;5654:862::-;;;;;;:::i;:::-;;:::i;6744:617::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;2663:85:111:-;;;:::i;3203:139:60:-;;;;;;:::i;:::-;;:::i;6545:266:111:-;;;;;;:::i;:::-;;:::i;3988:172::-;;;;;;:::i;:::-;;:::i;1117:451:62:-;;;;;;:::i;:::-;;:::i;3670:383::-;;;;;;:::i;:::-;;:::i;4218:149:111:-;;;;;;:::i;:::-;;:::i;1574:1915:62:-;1664:23;1690:19;;;:8;:19;;;;;1741:20;;1720:135;;;;-1:-1:-1;;;1720:135:62;;;;;;;:::i;:::-;;;;;;;;;1887:20;;;;-1:-1:-1;;;1887:20:62;;;;:28;;1911:4;1887:28;1866:128;;;;-1:-1:-1;;;1866:128:62;;;;;;;:::i;:::-;2026:20;;2049:3;-1:-1:-1;2005:133:62;;;;-1:-1:-1;;;2005:133:62;;;;;;;:::i;:::-;2213:40;2225:10;2237:15;2213:11;:40::i;:::-;2198:10;2170:39;;;;:27;:39;;;;;;:83;;2149:191;;;;-1:-1:-1;;;2149:191:62;;;;;;;:::i;:::-;2439:17;2435:694;;2582:10;2558:35;;;;:23;;;:35;;;;;;;;;2514:27;:39;;;;;;;:80;;;:43;:80;:::i;:::-;2500:10;2472:39;;;;:27;:39;;;;;:122;2435:694;;;2654:10;2630:35;;;;:23;;;:35;;;;;;2615:50;;2611:518;;;2735:10;2681:27;2711:35;;;:23;;;:35;;;;;;:53;;2751:12;2711:53;:39;:53;:::i;:::-;2848:10;2820:39;;;;:27;:39;;;;;;2681:83;;-1:-1:-1;2820:64:62;;2681:83;2820:64;:43;:64;:::i;:::-;2806:10;2778:39;;;;:27;:39;;;;;:106;-1:-1:-1;2611:518:62;;;2986:10;2915:27;2962:35;;;:23;;;:35;;;;;;2945:53;;:12;;:53;:16;:53;:::i;:::-;3082:10;3054:39;;;;:27;:39;;;;;;2915:83;;-1:-1:-1;3054:64:62;;2915:83;3054:64;:43;:64;:::i;:::-;3040:10;3012:39;;;;:27;:39;;;;;:106;-1:-1:-1;2611:518:62;3277:10;3253:35;;;;:23;;;:35;;;;;;3221:27;;;;:68;;;:31;:68;:::i;:::-;3191:27;;;:98;;;3329:45;;3361:12;3329:45;:31;:45;:::i;:::-;3299:27;;;:75;3456:10;3432:35;;;;:23;;;;:35;;;;;:50;-1:-1:-1;1574:1915:62:o;2469:81:111:-;2538:5;2531:12;;;;;;;;-1:-1:-1;;2531:12:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2506:13;;2531:12;;2538:5;;2531:12;;2538:5;2531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2469:81;;:::o;4505:166::-;4588:4;4604:39;4613:12;:10;:12::i;:::-;4627:7;4636:6;4604:8;:39::i;:::-;-1:-1:-1;4660:4:111;4505:166;;;;;:::o;3512:98::-;3591:12;;3512:98;:::o;460:26:61:-;;;;:::o;5131:317:111:-;5237:4;5253:36;5263:6;5271:9;5282:6;5253:9;:36::i;:::-;5299:121;5308:6;5316:12;:10;:12::i;:::-;5330:89;5368:6;5330:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5330:19:111;;;;;;:11;:19;;;;;;5350:12;:10;:12::i;:::-;-1:-1:-1;;;;;5330:33:111;;;;;;;;;;;;-1:-1:-1;5330:33:111;;;:89;;:37;:89;:::i;:::-;5299:8;:121::i;:::-;-1:-1:-1;5437:4:111;5131:317;;;;;:::o;1152:62:63:-;;;;;;;;;;;;;:::o;685:426:62:-;800:23;826:19;;;:8;:19;;;;;877:20;;:34;856:126;;;;-1:-1:-1;;;856:126:62;;;;;;;:::i;:::-;993:35;;;1038:20;;;;:35;;-1:-1:-1;;;;1038:35:62;-1:-1:-1;;;1038:35:62;;;;;;;;;;;-1:-1:-1;;;;;;1083:21:62;-1:-1:-1;;;;;1083:21:62;;;;;;;;;-1:-1:-1;685:426:62:o;2577:97:60:-;2653:7;:14;2577:97;:::o;3371:81:111:-;3436:9;;;;3371:81;:::o;1500:1071:60:-;1698:7;:14;1651:16;;1726:11;;;1722:114;;1760:12;;;1722:114;;;-1:-1:-1;1824:1:60;1810:11;;;:15;1722:114;1845:29;1891:4;1877:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1877:19:60;;1845:51;;1910:9;1906:78;1925:4;1921:1;:8;1906:78;;;1966:7;1978:5;1974:1;:9;1966:18;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1966:18:60;1948:12;1961:1;1948:15;;;;;;;;-1:-1:-1;;;;;1948:36:60;;;:15;;;;;;;;;;;:36;1931:3;;1906:78;;;-1:-1:-1;1995:13:60;;2037:225;2053:12;:19;2049:1;:23;2037:225;;;2142:1;2097:42;2109:12;2122:1;2109:15;;;;;;;;;;;;;;2126:12;2097:11;:42::i;:::-;:46;2093:159;;;2163:7;;;;;2093:159;;;2235:1;2209:12;2222:1;2209:15;;;;;;;;;;;;;:28;-1:-1:-1;;;;;2209:28:60;;;-1:-1:-1;;;;;2209:28:60;;;;;2093:159;2074:3;;2037:225;;;2271:25;2313:5;2299:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2299:20:60;;2271:48;;2337:1;2329:9;;2357:1;2353:5;;2348:192;2364:12;:19;2360:1;:23;2348:192;;;2435:1;-1:-1:-1;;;;;2408:29:60;:12;2421:1;2408:15;;;;;;;;;;;;;;-1:-1:-1;;;;;2408:29:60;;2404:126;;2475:12;2488:1;2475:15;;;;;;;;;;;;;;2457:8;2466:5;2457:15;;;;;;;;-1:-1:-1;;;;;2457:33:60;;;:15;;;;;;;;;;;:33;2508:7;;;;;2404:126;2385:3;;;;;2348:192;;;2556:8;1500:1071;-1:-1:-1;;;;;;;;1500:1071:60:o;5843:215:111:-;5931:4;5947:83;5956:12;:10;:12::i;:::-;5970:7;5979:50;6018:10;5979:11;:25;5991:12;:10;:12::i;:::-;-1:-1:-1;;;;;5979:25:111;;;;;;;;;;;;;;;;;-1:-1:-1;5979:25:111;;;:34;;;;;;;;;;;:50;:38;:50;:::i;1103:43:63:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1103:43:63;;;-1:-1:-1;;;1103:43:63;;;;;:::o;425:124:60:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;516:26:60::1;529:4;535:6;516:12;:26::i;:::-;1268:14:108::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;425:124:60;;;:::o;2877:158::-;-1:-1:-1;;;;;2990:26:60;;2953:7;2990:26;;;:18;:26;;;;;2979:49;;3018:9;2979:10;:49::i;:::-;2972:56;2877:158;-1:-1:-1;;;2877:158:60:o;770:724::-;834:16;862:13;885:9;904:30;937:7;904:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;904:40:60;;;;;;;;;;;;;;;;;;;;;;;963:1;959:5;;954:228;970:13;:20;966:1;:24;954:228;;;1061:1;1015:43;1027:13;1041:1;1027:16;;;;;;;;;;;;;;1045:12;1015:11;:43::i;:::-;:47;1011:161;;;1082:7;;;;;1011:161;;;1155:1;1128:13;1142:1;1128:16;;;;;;;;;;;;;:29;-1:-1:-1;;;;;1128:29:60;;;-1:-1:-1;;;;;1128:29:60;;;;;1011:161;992:3;;;;;954:228;;;1191:25;1233:5;1219:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1219:20:60;;1191:48;;1257:1;1249:9;;1277:1;1273:5;;1268:195;1284:13;:20;1280:1;:24;1268:195;;;1357:1;-1:-1:-1;;;;;1329:30:60;:13;1343:1;1329:16;;;;;;;;;;;;;;-1:-1:-1;;;;;1329:30:60;;1325:128;;1397:13;1411:1;1397:16;;;;;;;;;;;;;;1379:8;1388:5;1379:15;;;;;;;;-1:-1:-1;;;;;1379:34:60;;;:15;;;;;;;;;;;:34;1431:7;;;;;1325:128;1306:3;;;;;1268:195;;;1479:8;770:724;-1:-1:-1;;;;;770:724:60:o;4184:307:62:-;4242:23;4268:19;;;:8;:19;;;;;;;;4335:10;4319:27;;:15;;;:27;;;;;;;;;:36;4298:128;;;;-1:-1:-1;;;4298:128:62;;;;;;;:::i;:::-;4437:47;4453:10;4465:7;4474:9;4437:15;:47::i;:::-;4184:307;;:::o;3668:117:111:-;-1:-1:-1;;;;;3760:18:111;3734:7;3760:18;;;:9;:18;;;;;;;3668:117::o;7552:150:62:-;7637:4;7660:19;;;:8;:19;;;;;;;;-1:-1:-1;;;;;7660:35:62;;;;;;:27;;;;:35;;;;;;;7552:150::o;5654:862::-;5741:7;5786:19;;;:8;:19;;;;;;;;-1:-1:-1;;;;;5820:22:62;;;;:15;;;:22;;;;;;;;5816:36;;;5851:1;5844:8;;;;;5816:36;5863:19;5885:35;5899:7;:20;;;5885:13;:35::i;:::-;6086:20;;;;5863:57;;-1:-1:-1;6067:15:62;;-1:-1:-1;;;6086:20:62;;;;6085:122;;6167:40;6179:5;6186:7;:20;;;6167:11;:40::i;:::-;6085:122;;;-1:-1:-1;;;;;6122:30:62;;;;;;:23;;;:30;;;;;;6085:122;6067:140;;6349:13;6365:121;6411:7;:20;;;;;;;;;;;;6410:66;;6465:11;6410:66;;;6435:7;:27;;;6410:66;6377:14;;;;6365:27;;:7;;:27;:11;:27;:::i;:::-;:31;:121;:31;:121;:::i;:::-;6349:137;5654:862;-1:-1:-1;;;;;;;5654:862:62:o;6744:617::-;6841:20;7074:19;;;:8;:19;;;;;7119:20;;7158:14;;;;7198:21;;;;7251:27;;;;7303:20;;;;;7119;;7158:14;;7198:21;;7251:27;;7303:20;-1:-1:-1;;;7303:20:62;;;;-1:-1:-1;;;;;7341:13:62;;6744:617::o;2663:85:111:-;2734:7;2727:14;;;;;;;;-1:-1:-1;;2727:14:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2702:13;;2727:14;;2734:7;;2727:14;;2734:7;2727:14;;;;;;;;;;;;;;;;;;;;;;;;3203:139:60;3265:7;3291:44;3302:21;3325:9;3291:10;:44::i;6545:266:111:-;6638:4;6654:129;6663:12;:10;:12::i;:::-;6677:7;6686:96;6725:15;6686:96;;;;;;;;;;;;;;;;;:11;:25;6698:12;:10;:12::i;:::-;-1:-1:-1;;;;;6686:25:111;;;;;;;;;;;;;;;;;-1:-1:-1;6686:25:111;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;3988:172::-;4074:4;4090:42;4100:12;:10;:12::i;:::-;4114:9;4125:6;4090:9;:42::i;1117:451:62:-;1198:23;1224:19;;;:8;:19;;;;;1275:20;;1254:132;;;;-1:-1:-1;;;1254:132:62;;;;;;;:::i;:::-;1418:14;;;;:28;1397:130;;;;-1:-1:-1;;;1397:130:62;;;;;;;:::i;:::-;1538:14;;:23;-1:-1:-1;1117:451:62:o;3670:383::-;3803:23;3829:19;;;:8;:19;;;;;;3859:188;3883:6;:13;3879:1;:17;3859:188;;;3921:7;:15;;:26;3937:6;3944:1;3937:9;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3921:26:62;;;;;;;;;;;-1:-1:-1;3921:26:62;;;;3917:120;;3976:46;3992:6;3999:1;3992:9;;;;;;;;;;;;;;4003:7;4012:9;3976:15;:46::i;:::-;3898:3;;3859:188;;;;3670:383;;;:::o;4218:149:111:-;-1:-1:-1;;;;;4333:18:111;;;4307:7;4333:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4218:149::o;1274:134:110:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:110;;;;;;;:::i;931:104:107:-;1018:10;931:104;:::o;9609:340:111:-;-1:-1:-1;;;;;9710:19:111;;9702:68;;;;-1:-1:-1;;;9702:68:111;;;;;;;:::i;:::-;-1:-1:-1;;;;;9788:21:111;;9780:68;;;;-1:-1:-1;;;9780:68:111;;;;;;;:::i;:::-;-1:-1:-1;;;;;9859:18:111;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;9910:32;;;;;9889:6;;9910:32;:::i;:::-;;;;;;;;9609:340;;;:::o;5530:235:60:-;5684:32;5700:4;5706:2;5710:5;5684:15;:32::i;:::-;5726;5742:4;5748:2;5752:5;5726:15;:32::i;1692:187:110:-;1778:7;1813:12;1805:6;;;;1797:29;;;;-1:-1:-1;;;1797:29:110;;;;;;;;:::i;:::-;-1:-1:-1;;;1848:5:110;;;1692:187::o;1409:498:108:-;1820:4;1864:17;1895:7;1409:498;:::o;2046:174:111:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2141:26:111::1;:24;:26::i;:::-;2177:36;2200:4;2206:6;2177:22;:36::i;491:876:58:-:0;692:18;;635:7;;688:37;;-1:-1:-1;724:1:58;717:8;;688:37;806:18;;794:11;;-1:-1:-1;;806:22:58;;;794:35;;;;;;;;;;;;;;;;;;;:45;-1:-1:-1;;;;;794:45:58;781:58;;777:124;;872:18;;860:11;;-1:-1:-1;;872:22:58;;;860:35;;;;;;;;;;;;;;;;:41;;;853:48;;;;777:124;927:11;939:1;927:14;;;;;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;927:24:58;915:36;;911:50;;;-1:-1:-1;960:1:58;953:8;;911:50;1062:18;;1023:11;;-1:-1:-1;;1062:22:58;1094:228;1107:3;1101;:9;1094:228;;;1126:11;1158:1;1153;1141:9;;;:13;1140:19;1126:33;;1207:9;1177:11;1189:3;1177:16;;;;;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;1177:26:58;:39;1173:139;;1242:3;1236:9;;1173:139;;;1296:1;1290:3;:7;1284:13;;1173:139;1094:228;;;;1338:11;1350:3;1338:16;;;;;;;;;;;;;;;;;;:22;;;1331:29;;;;491:876;;;;:::o;4662:780:62:-;2014:11:114;;;;2006:55;;;;-1:-1:-1;;;2006:55:114;;;;;;;:::i;:::-;2136:11;:19;;-1:-1:-1;;2136:19:114;;;2150:5;4862:41:62::1;4886:5:::0;4893:9;4862:23:::1;:41::i;:::-;-1:-1:-1::0;;;;;4914:22:62;::::1;;::::0;;;:15:::1;::::0;::::1;:22;::::0;;;;:29;;-1:-1:-1;;4914:29:62::1;4939:4;4914:29;::::0;;4987:21:::1;::::0;::::1;::::0;4846:57;;-1:-1:-1;4977:32:62::1;::::0;4846:57;;4977:32:::1;:9;:32;:::i;:::-;4953:21;::::0;::::1;:56:::0;-1:-1:-1;;;;;5211:30:62;::::1;;::::0;;;:23:::1;::::0;::::1;:30;::::0;;;;;;;;5172:27:::1;:34:::0;;;;;;;:70:::1;::::0;::::1;:38;:70;:::i;:::-;-1:-1:-1::0;;;;;5135:34:62;::::1;;::::0;;;:27:::1;:34;::::0;;;;:107;5257:9;;5253:183:::1;;5314:13;::::0;;::::1;::::0;5307:44:::1;::::0;-1:-1:-1;;;5307:44:62;;-1:-1:-1;;;;;5314:13:62;;::::1;::::0;5307:30:::1;::::0;:44:::1;::::0;5338:5;;5345;;5307:44:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5282:143;;;;-1:-1:-1::0;;;5282:143:62::1;;;;;;;:::i;:::-;-1:-1:-1::0;;2310:11:114;:18;;-1:-1:-1;;2310:18:114;2324:4;2310:18;;;-1:-1:-1;;4662:780:62:o;2119:459:110:-;2177:7;2418:6;2414:45;;-1:-1:-1;2447:1:110;2440:8;;2414:45;2481:5;;;2485:1;2481;:5;:1;2504:5;;;;;:10;2496:56;;;;-1:-1:-1;;;2496:56:110;;;;;;;:::i;3033:130::-;3091:7;3117:39;3121:1;3124;3117:39;;;;;;;;;;;;;;;;;:3;:39::i;7285:530:111:-;-1:-1:-1;;;;;7390:20:111;;7382:70;;;;-1:-1:-1;;;7382:70:111;;;;;;;:::i;:::-;-1:-1:-1;;;;;7470:23:111;;7462:71;;;;-1:-1:-1;;;7462:71:111;;;;;;;:::i;:::-;7544:47;7565:6;7573:9;7584:6;7544:20;:47::i;:::-;7622:71;7644:6;7622:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7622:17:111;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;7602:17:111;;;;;;;:9;:17;;;;;;:91;;;;7726:20;;;;;;;:32;;7751:6;7726:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;7703:20:111;;;;;;;:9;:20;;;;;;;:55;;;;7773:35;;;;;;;;;;7801:6;;7773:35;:::i;4832:248:60:-;4917:35;4936:4;4942:2;4946:5;4917:18;:35::i;:::-;4962:31;:29;:31::i;:::-;5003;5029:4;5003:25;:31::i;:::-;5044:29;5070:2;5044:25;:29::i;858:66:107:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;1264:55;858:66:107;:::o;2226:177:111:-;1024:12:108;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:108;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:108;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:108;;;;;1225:18;1213:4;1225:18;;;1170:80;2333:12:111;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2355:16:111;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2381:9:111::1;:14:::0;;-1:-1:-1;;2381:14:111::1;2393:2;2381:14;::::0;;1264:55:108;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:108;;;2226:177:111;;;:::o;3638:338:110:-;3724:7;3824:12;3817:5;3809:28;;;;-1:-1:-1;;;3809:28:110;;;;;;;;:::i;:::-;;3847:9;3863:1;3859;:5;;;;;;;3638:338;-1:-1:-1;;;;;3638:338:110:o;3469:618:60:-;3562:10;;;3561:28;;;3586:2;-1:-1:-1;;;;;3578:10:60;:4;-1:-1:-1;;;;;3578:10:60;;3561:28;3557:65;;;3605:7;;3557:65;3692:13;3702:2;3692:9;:13::i;:::-;:18;3691:42;;;;-1:-1:-1;;;;;;3716:16:60;;;;3691:42;3687:236;;;3763:11;;:18;;3779:1;3763:18;:15;:18;:::i;:::-;3749:11;:32;3800:21;3818:2;3800:17;:21::i;:::-;3795:118;;3841:7;:16;;;;;;;;;;;;;-1:-1:-1;;;;;;3841:16:60;-1:-1:-1;;;;;3841:16:60;;;;;;;;-1:-1:-1;3875:16:60;;;:12;3841:16;3875;;;;:23;;-1:-1:-1;;3875:23:60;;;;;;3795:118;4007:15;4017:4;4007:9;:15::i;:::-;3998:5;:24;3994:87;;;4052:11;;:18;;4068:1;4052:18;:15;:18;:::i;:::-;4038:11;:32;3469:618;;;:::o;4193:121::-;4253:54;4270:21;4293:13;:11;:13::i;:::-;4253:16;:54::i;:::-;4193:121::o;4487:140::-;-1:-1:-1;;;;;4574:26:60;;;;;;:18;:26;;;;;4557:63;;4602:17;4593:6;4602:9;:17::i;3348:115::-;-1:-1:-1;;;;;3436:20:60;3413:4;3436:20;;;:12;:20;;;;;;;;;3348:115::o;1666:894:58:-;2021:18;;:23;;:104;;-1:-1:-1;2091:18:58;;2079:11;;-1:-1:-1;;2091:22:58;;;2079:35;;;;;;;;;;;;;;;;;;;:45;-1:-1:-1;;;;;2079:45:58;2061:15;:63;2021:104;2004:550;;;2211:65;;;;;;;;2243:15;-1:-1:-1;;;;;2211:65:58;;;;;;;;;;;;2194:83;;;;;;;;-1:-1:-1;2194:83:58;;;;;;;;;;;;;;;;;-1:-1:-1;;2194:83:58;;;;;;;;;;;;;;2315:18;;2297:41;;-1:-1:-1;;2315:22:58;;;;;2297:41;;-1:-1:-1;2297:41:58;2004:550;;;2479:18;;2432:32;;2467:11;;-1:-1:-1;;2479:22:58;;;2467:35;;;;;;;;;;;;;;2516:19;2467:35;;;;;2516:19;:27;;;-1:-1:-1;1666:894:58;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;142:146;217:20;;242:41;217:20;242:41;:::i;1464:442::-;;1566:3;1559:4;1551:6;1547:17;1543:27;1533:2;;-1:-1;;1574:12;1533:2;1621:6;1608:20;26834:18;26826:6;26823:30;26820:2;;;-1:-1;;26856:12;26820:2;1643:65;26929:9;26910:17;;-1:-1;;26906:33;26997:4;26987:15;1643:65;:::i;:::-;1634:74;;1728:6;1721:5;1714:21;1832:3;26997:4;1823:6;1756;1814:16;;1811:25;1808:2;;;1849:1;;1839:12;1808:2;28676:6;26997:4;1756:6;1752:17;26997:4;1790:5;1786:16;28653:30;28732:1;28714:16;;;26997:4;28714:16;28707:27;1790:5;1526:380;-1:-1;;1526:380::o;2051:241::-;;2155:2;2143:9;2134:7;2130:23;2126:32;2123:2;;;-1:-1;;2161:12;2123:2;85:6;72:20;97:33;124:5;97:33;:::i;2299:366::-;;;2420:2;2408:9;2399:7;2395:23;2391:32;2388:2;;;-1:-1;;2426:12;2388:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2478:63;-1:-1;2578:2;2617:22;;72:20;97:33;72:20;97:33;:::i;:::-;2586:63;;;;2382:283;;;;;:::o;2672:491::-;;;;2810:2;2798:9;2789:7;2785:23;2781:32;2778:2;;;-1:-1;;2816:12;2778:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2868:63;-1:-1;2968:2;3007:22;;72:20;97:33;72:20;97:33;:::i;:::-;2772:391;;2976:63;;-1:-1;;;3076:2;3115:22;;;;1981:20;;2772:391::o;3170:366::-;;;3291:2;3279:9;3270:7;3266:23;3262:32;3259:2;;;-1:-1;;3297:12;3259:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3349:63;3449:2;3488:22;;;;1393:20;;-1:-1;;;3253:283::o;3916:257::-;;4028:2;4016:9;4007:7;4003:23;3999:32;3996:2;;;-1:-1;;4034:12;3996:2;1272:6;1266:13;1284:30;1308:5;1284:30;:::i;4180:241::-;;4284:2;4272:9;4263:7;4259:23;4255:32;4252:2;;;-1:-1;;4290:12;4252:2;-1:-1;1393:20;;4246:175;-1:-1;4246:175::o;4428:518::-;;;4582:2;4570:9;4561:7;4557:23;4553:32;4550:2;;;-1:-1;;4588:12;4550:2;1406:6;1393:20;4640:63;;4768:2;;4757:9;4753:18;4740:32;4792:18;;4784:6;4781:30;4778:2;;;-1:-1;;4814:12;4778:2;4913:6;4902:9;4898:22;446:3;439:4;431:6;427:17;423:27;413:2;;-1:-1;;454:12;413:2;501:6;488:20;474:34;;4792:18;26530:6;26527:30;26524:2;;;-1:-1;;26560:12;26524:2;4768;26597:6;26593:17;;;523:88;4768:2;26593:17;26658:15;523:88;:::i;:::-;639:21;;;696:14;;;;671:17;;;776:27;;;;;773:36;-1:-1;770:2;;;-1:-1;;812:12;770:2;-1:-1;838:10;;832:214;857:6;854:1;851:13;832:214;;;937:45;978:3;966:10;937:45;:::i;:::-;925:58;;879:1;872:9;;;;;997:14;;;;1025;;832:214;;;836:14;4834:96;;;;;;;;;4544:402;;;;;:::o;4953:366::-;;;5074:2;5062:9;5053:7;5049:23;5045:32;5042:2;;;-1:-1;;5080:12;5042:2;-1:-1;;1393:20;;;5232:2;5271:22;;;1981:20;;-1:-1;5036:283::o;5326:611::-;;;;;5478:3;5466:9;5457:7;5453:23;5449:33;5446:2;;;-1:-1;;5485:12;5446:2;1406:6;1393:20;5537:63;;5637:2;5680:9;5676:22;1981:20;5645:63;;5745:2;5785:9;5781:22;1124:20;1149:30;1173:5;1149:30;:::i;:::-;5753:60;-1:-1;5850:2;5889:22;;72:20;97:33;72:20;97:33;:::i;:::-;5440:497;;;;-1:-1;5440:497;;-1:-1;;5440:497::o;5944:578::-;;;6085:2;6073:9;6064:7;6060:23;6056:32;6053:2;;;-1:-1;;6091:12;6053:2;6149:17;6136:31;6187:18;;6179:6;6176:30;6173:2;;;-1:-1;;6209:12;6173:2;6239:63;6294:7;6285:6;6274:9;6270:22;6239:63;:::i;:::-;6229:73;;6367:2;6356:9;6352:18;6339:32;6325:46;;6187:18;6383:6;6380:30;6377:2;;;-1:-1;;6413:12;6377:2;;6443:63;6498:7;6489:6;6478:9;6474:22;6443:63;:::i;:::-;6433:73;;;6047:475;;;;;:::o;6777:491::-;;;;6915:2;6903:9;6894:7;6890:23;6886:32;6883:2;;;-1:-1;;6921:12;6883:2;-1:-1;;1981:20;;;7073:2;7112:22;;1981:20;;-1:-1;7181:2;7220:22;;;1981:20;;6877:391;-1:-1;6877:391::o;15666:333::-;-1:-1;;;;;28361:54;;;;7518:37;;15985:2;15970:18;;15503:37;15821:2;15806:18;;15792:207::o;16006:370::-;16183:2;16197:47;;;27280:12;;16168:18;;;27684:19;;;16006:370;;16183:2;27134:14;;;;27724;;;;16006:370;8126:260;8151:6;8148:1;8145:13;8126:260;;;8212:13;;-1:-1;;;;;28361:54;7518:37;;27539:14;;;;7429;;;;26834:18;8166:9;8126:260;;;-1:-1;16250:116;;16154:222;-1:-1;;;;;;16154:222::o;16383:210::-;28194:13;;28187:21;8481:34;;16504:2;16489:18;;16475:118::o;16600:310::-;;16747:2;;16768:17;16761:47;8672:5;27280:12;27696:6;16747:2;16736:9;16732:18;27684:19;-1:-1;28821:101;28835:6;28832:1;28829:13;28821:101;;;28902:11;;;;;28896:18;28883:11;;;27724:14;28883:11;28876:39;28850:10;;28821:101;;;28937:6;28934:1;28931:13;28928:2;;;-1:-1;27724:14;28993:6;16736:9;28984:16;;28977:27;28928:2;-1:-1;26929:9;29093:14;-1:-1;;29089:28;8830:39;;;;27724:14;8830:39;;16718:192;-1:-1;;;16718:192::o;16917:416::-;17117:2;17131:47;;;9106:2;17102:18;;;27684:19;9142:34;27724:14;;;9122:55;-1:-1;;;9197:12;;;9190:27;9236:12;;;17088:245::o;17340:416::-;17540:2;17554:47;;;9487:2;17525:18;;;27684:19;-1:-1;;;;;;;;;;;27724:14;;;9503:55;-1:-1;;;9578:12;;;9571:45;9635:12;;;17511:245::o;17763:416::-;17963:2;17977:47;;;9886:2;17948:18;;;27684:19;9922:34;27724:14;;;9902:55;9991:25;9977:12;;;9970:47;10036:12;;;17934:245::o;18186:416::-;18386:2;18400:47;;;10287:2;18371:18;;;27684:19;10323:34;27724:14;;;10303:55;-1:-1;;;10378:12;;;10371:26;10416:12;;;18357:245::o;18609:416::-;18809:2;18823:47;;;10667:2;18794:18;;;27684:19;10703:29;27724:14;;;10683:50;10752:12;;;18780:245::o;19032:416::-;19232:2;19246:47;;;11003:2;19217:18;;;27684:19;11039:34;27724:14;;;11019:55;-1:-1;;;11094:12;;;11087:37;11143:12;;;19203:245::o;19455:416::-;19655:2;19669:47;;;11394:2;19640:18;;;27684:19;11430:34;27724:14;;;11410:55;-1:-1;;;11485:12;;;11478:37;11534:12;;;19626:245::o;19878:416::-;20078:2;20092:47;;;11785:2;20063:18;;;27684:19;11821:34;27724:14;;;11801:55;-1:-1;;;11876:12;;;11869:25;11913:12;;;20049:245::o;20301:416::-;20501:2;20515:47;;;12164:2;20486:18;;;27684:19;-1:-1;;;;;;;;;;;27724:14;;;12180:55;-1:-1;;;12255:12;;;12248:46;12313:12;;;20472:245::o;20724:416::-;20924:2;20938:47;;;12564:2;20909:18;;;27684:19;12600:34;27724:14;;;12580:55;-1:-1;;;12655:12;;;12648:38;12705:12;;;20895:245::o;21147:416::-;21347:2;21361:47;;;12956:2;21332:18;;;27684:19;12992:34;27724:14;;;12972:55;-1:-1;;;13047:12;;;13040:43;13102:12;;;21318:245::o;21570:416::-;21770:2;21784:47;;;13353:2;21755:18;;;27684:19;13389:34;27724:14;;;13369:55;-1:-1;;;13444:12;;;13437:29;13485:12;;;21741:245::o;21993:416::-;22193:2;22207:47;;;13736:2;22178:18;;;27684:19;13772:34;27724:14;;;13752:55;-1:-1;;;13827:12;;;13820:28;13867:12;;;22164:245::o;22416:416::-;22616:2;22630:47;;;14118:2;22601:18;;;27684:19;-1:-1;;;;;;;;;;;27724:14;;;14134:55;14223:30;14209:12;;;14202:52;14273:12;;;22587:245::o;22839:416::-;23039:2;23053:47;;;14524:2;23024:18;;;27684:19;-1:-1;;;;;;;;;;;27724:14;;;14540:55;14629:31;14615:12;;;14608:53;14680:12;;;23010:245::o;23262:416::-;23462:2;23476:47;;;14931:2;23447:18;;;27684:19;14967:33;27724:14;;;14947:54;15020:12;;;23433:245::o;23685:416::-;23885:2;23899:47;;;15271:2;23870:18;;;27684:19;15307:34;27724:14;;;15287:55;-1:-1;;;15362:12;;;15355:32;15406:12;;;23856:245::o;24108:222::-;15503:37;;;24235:2;24220:18;;24206:124::o;24337:768::-;15503:37;;;24763:2;24748:18;;15503:37;;;;24846:2;24831:18;;15503:37;;;;24929:2;24914:18;;15503:37;-1:-1;;;;;28361:54;25012:3;24997:19;;7518:37;28194:13;28187:21;28372:42;25075:19;;8481:34;24598:3;24583:19;;24569:536::o;25112:768::-;15503:37;;;25538:2;25523:18;;15503:37;;;;25621:2;25606:18;;15503:37;;;;25704:2;25689:18;;15503:37;28194:13;28187:21;25781:3;25766:19;;8481:34;-1:-1;;;;;28361:54;28372:42;25850:19;;7518:37;25373:3;25358:19;;25344:536::o;25887:214::-;28577:4;28566:16;;;;15619:35;;26010:2;25995:18;;25981:120::o;26108:256::-;26170:2;26164:9;26196:17;;;26271:18;26256:34;;26292:22;;;26253:62;26250:2;;;26328:1;;26318:12;26250:2;26170;26337:22;26148:216;;-1:-1;26148:216::o;29130:117::-;-1:-1;;;;;28361:54;;29189:35;;29179:2;;29238:1;;29228:12;29394:111;29475:5;28194:13;28187:21;29453:5;29450:32;29440:2;;29496:1;;29486:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity 0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol\";\n\nimport \"./CheckpointedToken/CheckpointedToken.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol\";\nimport \"./DepositAllocaterStorage.sol\";\n\n\n/**\n * @title Logic for distributing funds based on checkpointing\n * @dev abstract contract\n */\ncontract DepositAllocater is CheckpointedToken, DepositAllocaterStorage, ReentrancyGuardUpgradeSafe {\n\n    using SafeMath for uint256;\n\n\n    function createDeposit(bytes32 depositId, uint256 scheduledFor, bool onlySignaled, address token) public {\n        Deposit storage deposit = deposits[depositId];\n\n        require(\n            deposit.scheduledFor == uint256(0),\n            \"Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS\"\n        );\n\n        deposit.scheduledFor = scheduledFor;\n        deposit.onlySignaled = onlySignaled;\n        deposit.token = token;\n    }\n\n    function updateDepositAmount(bytes32 depositId, uint256 amount) public {\n        Deposit storage deposit = deposits[depositId];\n\n        require(\n            deposit.scheduledFor != uint256(0),\n            \"Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST\"\n        );\n\n        require(\n            deposit.amount == uint256(0),\n            \"Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET\"\n        );\n\n        deposit.amount = amount;\n    }\n\n    function signalAmountForDeposit(bytes32 depositId, uint256 signalAmount) public {\n        Deposit storage deposit = deposits[depositId];\n\n        require(\n            deposit.scheduledFor != uint256(0),\n            \"Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST\"\n        );\n\n        require(\n            deposit.onlySignaled == true,\n            \"Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED\"\n        );\n\n        require(\n            deposit.scheduledFor > now,\n            \"Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED\"\n        );\n\n        require(\n            totalAmountSignaledByHolder[msg.sender] <= balanceOfAt(msg.sender, block.timestamp),\n            \"Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE\"\n        );\n\n        // increment total amount of signaled by the holder comprising all deposits\n        if (signalAmount == 0) {\n            totalAmountSignaledByHolder[msg.sender] = totalAmountSignaledByHolder[msg.sender].sub(deposit.signaledAmounts[msg.sender]);\n        } else if (signalAmount < deposit.signaledAmounts[msg.sender]) {\n            uint256 deltaAmountSignaled = deposit.signaledAmounts[msg.sender].sub(signalAmount);\n            totalAmountSignaledByHolder[msg.sender] = totalAmountSignaledByHolder[msg.sender].sub(deltaAmountSignaled);\n        } else {\n            uint256 deltaAmountSignaled = signalAmount.sub(deposit.signaledAmounts[msg.sender]);\n            totalAmountSignaledByHolder[msg.sender] = totalAmountSignaledByHolder[msg.sender].add(deltaAmountSignaled);\n        }\n\n        // update total amount signaled for deposit\n        deposit.totalAmountSignaled = deposit.totalAmountSignaled.sub(deposit.signaledAmounts[msg.sender]);\n        deposit.totalAmountSignaled = deposit.totalAmountSignaled.add(signalAmount);\n        // update the signaled amount of holder\n        deposit.signaledAmounts[msg.sender] = signalAmount;\n    }\n\n    /**\n     * @notice Issuer can push funds to provided addresses\n     * @param depositId Id of the deposit\n     * @param payees Addresses to which to push the funds\n     */\n    function pushFundsToAddresses(\n        bytes32 depositId,\n        address payable[] memory payees\n    )\n        public\n    {\n        Deposit storage deposit = deposits[depositId];\n\n        for (uint256 i = 0; i < payees.length; i++) {\n            if (deposit.claimed[payees[i]] == false) {\n                transferDeposit(payees[i], deposit, depositId);\n            }\n        }\n    }\n\n    /**\n     * @notice Withdraws the holders share of funds of the deposit\n     * @param depositId Id of the deposit\n     */\n    function claimDeposit(bytes32 depositId) public {\n        Deposit storage deposit = deposits[depositId];\n\n        require(\n            deposit.claimed[msg.sender] == false,\n            \"Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED\"\n        );\n\n        transferDeposit(msg.sender, deposit, depositId);\n    }\n\n    /**\n     * @notice Internal function for transferring deposits\n     * @param payee Address of holder\n     * @param deposit Pointer to deposit in storage\n     */\n    function transferDeposit(\n        address payee,\n        Deposit storage deposit,\n        bytes32 depositId\n    )\n        internal\n        virtual\n        nonReentrant()\n    {\n        uint256 claim = calculateClaimOnDeposit(payee, depositId);\n\n        deposit.claimed[payee] = true;\n        deposit.claimedAmount = claim.add(deposit.claimedAmount);\n\n        // decrease total amount signaled by holder for all deposits by the holders signaled amount of the deposit\n        totalAmountSignaledByHolder[payee] = totalAmountSignaledByHolder[payee].sub(deposit.signaledAmounts[payee]);\n\n        if (claim > 0) {\n            require(\n                IERC20(deposit.token).transfer(payee, claim),\n                \"Deposit.transferDeposit: TRANSFER_FAILED\"\n            );\n        }\n    }\n\n    /**\n     * @notice Calculate claimable amount of a deposit for a given address\n     * @param payee Address of holder\n     * @param depositId Id of the deposit\n     * @return withdrawable amount\n     */\n    function calculateClaimOnDeposit(address payee, bytes32 depositId) public view returns(uint256) {\n        Deposit storage deposit = deposits[depositId];\n\n        if (deposit.claimed[payee]) return 0;\n\n        uint256 totalSupply = totalSupplyAt(deposit.scheduledFor);\n        // if deposit is marked as `onlySignaled` use the holders signaled amount\n        // instead of the holders checkpointed balance\n        uint256 balance = (deposit.onlySignaled)\n            ? deposit.signaledAmounts[payee]\n            : balanceOfAt(payee, deposit.scheduledFor);\n        // if deposit is marked as `onlySignaled` use the total amount signaled\n        // instead of the checkpointed total supply\n        uint256 claim = balance.mul(deposit.amount).div(\n            (deposit.onlySignaled) ? deposit.totalAmountSignaled : totalSupply\n        );\n\n        return claim;\n    }\n\n    /**\n     * @notice Returns params of a deposit\n     * @return scheduledFor\n     * @return amount\n     * @return claimedAmount\n     * @return totalAmountSignaled\n     * @return onlySignaled\n     * @return token\n     */\n    function getDeposit(bytes32 depositId)\n        public\n        view\n        returns (\n            uint256 scheduledFor,\n            uint256 amount,\n            uint256 claimedAmount,\n            uint256 totalAmountSignaled,\n            bool onlySignaled,\n            address token\n        )\n    {\n        Deposit storage deposit = deposits[depositId];\n\n        scheduledFor = deposit.scheduledFor;\n        amount = deposit.amount;\n        claimedAmount = deposit.claimedAmount;\n        totalAmountSignaled = deposit.totalAmountSignaled;\n        onlySignaled = deposit.onlySignaled;\n        token = deposit.token;\n    }\n\n    /**\n     * @notice Checks whether an address has withdrawn funds for a deposit\n     * @param depositId Id of the deposit\n     * @return bool whether the address has claimed\n     */\n    function hasClaimedDeposit(address holder, bytes32 depositId) external view returns (bool) {\n        return deposits[depositId].claimed[holder];\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocater.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocater.sol",
    "exportedSymbols": {
      "DepositAllocater": [
        21141
      ]
    },
    "id": 21142,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 20580,
        "literals": [
          "solidity",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:23:62"
      },
      {
        "id": 20581,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "65:33:62"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol",
        "id": 20582,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 37624,
        "src": "100:78:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "id": 20583,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 38350,
        "src": "179:86:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedToken.sol",
        "file": "./CheckpointedToken/CheckpointedToken.sol",
        "id": 20584,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 20551,
        "src": "267:51:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "id": 20585,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 38350,
        "src": "319:86:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocaterStorage.sol",
        "file": "./DepositAllocaterStorage.sol",
        "id": 20586,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 21179,
        "src": "406:39:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20588,
              "name": "CheckpointedToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20550,
              "src": "573:17:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckpointedToken_$20550",
                "typeString": "contract CheckpointedToken"
              }
            },
            "id": 20589,
            "nodeType": "InheritanceSpecifier",
            "src": "573:17:62"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20590,
              "name": "DepositAllocaterStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21178,
              "src": "592:23:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositAllocaterStorage_$21178",
                "typeString": "contract DepositAllocaterStorage"
              }
            },
            "id": 20591,
            "nodeType": "InheritanceSpecifier",
            "src": "592:23:62"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20592,
              "name": "ReentrancyGuardUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 38349,
              "src": "617:26:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuardUpgradeSafe_$38349",
                "typeString": "contract ReentrancyGuardUpgradeSafe"
              }
            },
            "id": 20593,
            "nodeType": "InheritanceSpecifier",
            "src": "617:26:62"
          }
        ],
        "contractDependencies": [
          19984,
          19992,
          20550,
          20578,
          21178,
          37222,
          37297,
          38157,
          38235,
          38349
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 20587,
          "nodeType": "StructuredDocumentation",
          "src": "448:95:62",
          "text": " @title Logic for distributing funds based on checkpointing\n @dev abstract contract"
        },
        "fullyImplemented": true,
        "id": 21141,
        "linearizedBaseContracts": [
          21141,
          38349,
          21178,
          20550,
          20578,
          19984,
          19992,
          38157,
          38235,
          37222,
          37297
        ],
        "name": "DepositAllocater",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20596,
            "libraryName": {
              "contractScope": null,
              "id": 20594,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37623,
              "src": "657:8:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$37623",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "651:27:62",
            "typeName": {
              "id": 20595,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "670:7:62",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 20642,
              "nodeType": "Block",
              "src": "790:321:62",
              "statements": [
                {
                  "assignments": [
                    20608
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20608,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20642,
                      "src": "800:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20607,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "800:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20612,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20609,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "826:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20611,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20610,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20598,
                      "src": "835:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "826:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "800:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20614,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20608,
                            "src": "877:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20615,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "877:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "909:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "901:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20616,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "901:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "901:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "877:34:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e6372656174654465706f7369743a204445504f5349545f414c52454144595f455849535453",
                        "id": 20621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "925:47:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5eaeba7c93b90f993c30a6704edd891a467e090e3e574ee2fc8c24d8ca538151",
                          "typeString": "literal_string \"Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS\""
                        },
                        "value": "Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5eaeba7c93b90f993c30a6704edd891a467e090e3e574ee2fc8c24d8ca538151",
                          "typeString": "literal_string \"Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS\""
                        }
                      ],
                      "id": 20613,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "856:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "856:126:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20623,
                  "nodeType": "ExpressionStatement",
                  "src": "856:126:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20624,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20608,
                        "src": "993:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20626,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "scheduledFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21146,
                      "src": "993:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20627,
                      "name": "scheduledFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20600,
                      "src": "1016:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "993:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20629,
                  "nodeType": "ExpressionStatement",
                  "src": "993:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20630,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20608,
                        "src": "1038:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20632,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "onlySignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21156,
                      "src": "1038:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20633,
                      "name": "onlySignaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20602,
                      "src": "1061:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1038:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20635,
                  "nodeType": "ExpressionStatement",
                  "src": "1038:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20636,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20608,
                        "src": "1083:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20638,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21154,
                      "src": "1083:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20639,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20604,
                      "src": "1099:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1083:21:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 20641,
                  "nodeType": "ExpressionStatement",
                  "src": "1083:21:62"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "302424ea",
            "id": 20643,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20598,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "708:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "708:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20600,
                  "mutability": "mutable",
                  "name": "scheduledFor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "727:20:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20599,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "727:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20602,
                  "mutability": "mutable",
                  "name": "onlySignaled",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "749:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20601,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "749:4:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20604,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "768:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "768:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "707:75:62"
            },
            "returnParameters": {
              "id": 20606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "790:0:62"
            },
            "scope": 21141,
            "src": "685:426:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20684,
              "nodeType": "Block",
              "src": "1188:380:62",
              "statements": [
                {
                  "assignments": [
                    20651
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20651,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20684,
                      "src": "1198:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20650,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "1198:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20655,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20652,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "1224:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20654,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20653,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20645,
                      "src": "1233:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1224:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1198:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20657,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20651,
                            "src": "1275:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20658,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "1275:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1307:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1299:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20659,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1299:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1299:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1275:34:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7570646174654465706f736974416d6f756e743a204445504f5349545f444f45535f4e4f545f4558495354",
                        "id": 20664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1323:53:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_adcd2871d2d832b6f8adc2469dac32ff1f13ed3fd8ce64e9ba72771446bbf61b",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST\""
                        },
                        "value": "Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_adcd2871d2d832b6f8adc2469dac32ff1f13ed3fd8ce64e9ba72771446bbf61b",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST\""
                        }
                      ],
                      "id": 20656,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1254:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1254:132:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20666,
                  "nodeType": "ExpressionStatement",
                  "src": "1254:132:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20668,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20651,
                            "src": "1418:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20669,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21148,
                          "src": "1418:14:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20672,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1444:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1436:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20670,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1436:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1436:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1418:28:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7570646174654465706f736974416d6f756e743a204445504f5349545f414d4f554e545f414c52454144595f534554",
                        "id": 20675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1460:57:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_16bf5d6d1692e2ed592673684ae298f40190546f78c26700b70bb9b020c2a07c",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET\""
                        },
                        "value": "Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_16bf5d6d1692e2ed592673684ae298f40190546f78c26700b70bb9b020c2a07c",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET\""
                        }
                      ],
                      "id": 20667,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1397:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1397:130:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20677,
                  "nodeType": "ExpressionStatement",
                  "src": "1397:130:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20678,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20651,
                        "src": "1538:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20680,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21148,
                      "src": "1538:14:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20681,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20647,
                      "src": "1555:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1538:23:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20683,
                  "nodeType": "ExpressionStatement",
                  "src": "1538:23:62"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "a999b73f",
            "id": 20685,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateDepositAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20645,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20685,
                  "src": "1146:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20644,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1146:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20647,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20685,
                  "src": "1165:14:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20646,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1165:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1145:35:62"
            },
            "returnParameters": {
              "id": 20649,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1188:0:62"
            },
            "scope": 21141,
            "src": "1117:451:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20853,
              "nodeType": "Block",
              "src": "1654:1835:62",
              "statements": [
                {
                  "assignments": [
                    20693
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20693,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20853,
                      "src": "1664:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20692,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "1664:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20697,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20694,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "1690:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20696,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20695,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20687,
                      "src": "1699:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1690:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1664:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20699,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "1741:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20700,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "1741:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1773:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1765:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20701,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1765:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1765:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1741:34:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a204445504f5349545f444f45535f4e4f545f4558495354",
                        "id": 20706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1789:56:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_92257904552c58398d9274810af1daf80cdeff465abbf90dc9a755734276b614",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST\""
                        },
                        "value": "Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_92257904552c58398d9274810af1daf80cdeff465abbf90dc9a755734276b614",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST\""
                        }
                      ],
                      "id": 20698,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1720:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1720:135:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20708,
                  "nodeType": "ExpressionStatement",
                  "src": "1720:135:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20710,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "1887:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20711,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "onlySignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21156,
                          "src": "1887:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 20712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1911:4:62",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "1887:28:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a205349474e414c494e475f4e4f545f454e41424c4544",
                        "id": 20714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1929:55:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0a7d425a3f36c44c0251bfb2d63fef0479a5f9b39560e06042caf2ce76e0cda3",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED\""
                        },
                        "value": "Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0a7d425a3f36c44c0251bfb2d63fef0479a5f9b39560e06042caf2ce76e0cda3",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED\""
                        }
                      ],
                      "id": 20709,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1866:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1866:128:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20716,
                  "nodeType": "ExpressionStatement",
                  "src": "1866:128:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20718,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "2026:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20719,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "2026:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20720,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -17,
                          "src": "2049:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2026:26:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a204445504f5349545f49535f414c52454144595f50524f434553534544",
                        "id": 20722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2066:62:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dfe0564ca6d329d1c74c16277cc04750915bda9c19f0b471d39682dbc5970d60",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED\""
                        },
                        "value": "Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dfe0564ca6d329d1c74c16277cc04750915bda9c19f0b471d39682dbc5970d60",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED\""
                        }
                      ],
                      "id": 20717,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2005:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2005:133:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20724,
                  "nodeType": "ExpressionStatement",
                  "src": "2005:133:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 20726,
                            "name": "totalAmountSignaledByHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21173,
                            "src": "2170:27:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20729,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20727,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "2198:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2198:10:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2170:39:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20731,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2225:3:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 20732,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2225:10:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20733,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "2237:5:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 20734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2237:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 20730,
                            "name": "balanceOfAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20316,
                            "src": "2213:11:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 20735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2213:40:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2170:83:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a205349474e414c5f414d4f554e545f455843454544535f42414c414e4345",
                        "id": 20737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2267:63:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e8121dd3110d5eca51645f6a19c85212783e1981df5e4e4ef9eb7c9af67d4663",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE\""
                        },
                        "value": "Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e8121dd3110d5eca51645f6a19c85212783e1981df5e4e4ef9eb7c9af67d4663",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE\""
                        }
                      ],
                      "id": 20725,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2149:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2149:191:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20739,
                  "nodeType": "ExpressionStatement",
                  "src": "2149:191:62"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20740,
                      "name": "signalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20689,
                      "src": "2439:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20741,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2455:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2439:17:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 20761,
                        "name": "signalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20689,
                        "src": "2615:12:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20762,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "2630:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20763,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signaledAmounts",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21164,
                          "src": "2630:23:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 20766,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20764,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2654:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 20765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2654:10:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2630:35:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2615:50:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 20817,
                      "nodeType": "Block",
                      "src": "2901:228:62",
                      "statements": [
                        {
                          "assignments": [
                            20794
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 20794,
                              "mutability": "mutable",
                              "name": "deltaAmountSignaled",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 20817,
                              "src": "2915:27:62",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 20793,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2915:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 20803,
                          "initialValue": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20797,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20693,
                                    "src": "2962:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  "id": 20798,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signaledAmounts",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21164,
                                  "src": "2962:23:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20801,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20799,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2986:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20800,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2986:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2962:35:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 20795,
                                "name": "signalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20689,
                                "src": "2945:12:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "2945:16:62",
                              "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": 20802,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2945:53:62",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2915:83:62"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 20815,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20804,
                                "name": "totalAmountSignaledByHolder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21173,
                                "src": "3012:27:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 20807,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20805,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3040:3:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 20806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3040:10:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "3012:39:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 20813,
                                  "name": "deltaAmountSignaled",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20794,
                                  "src": "3098:19:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20808,
                                    "name": "totalAmountSignaledByHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21173,
                                    "src": "3054:27:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 20811,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20809,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "3082:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20810,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3082:10:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3054:39:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 20812,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 37456,
                                "src": "3054:43:62",
                                "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": 20814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3054:64:62",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3012:106:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 20816,
                          "nodeType": "ExpressionStatement",
                          "src": "3012:106:62"
                        }
                      ]
                    },
                    "id": 20818,
                    "nodeType": "IfStatement",
                    "src": "2611:518:62",
                    "trueBody": {
                      "id": 20792,
                      "nodeType": "Block",
                      "src": "2667:228:62",
                      "statements": [
                        {
                          "assignments": [
                            20769
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 20769,
                              "mutability": "mutable",
                              "name": "deltaAmountSignaled",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 20792,
                              "src": "2681:27:62",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 20768,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2681:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 20778,
                          "initialValue": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20776,
                                "name": "signalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20689,
                                "src": "2751:12:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20770,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20693,
                                    "src": "2711:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  "id": 20771,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signaledAmounts",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21164,
                                  "src": "2711:23:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20774,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20772,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2735:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20773,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2735:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2711:35:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "2711:39:62",
                              "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": 20777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2711:53:62",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2681:83:62"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 20790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20779,
                                "name": "totalAmountSignaledByHolder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21173,
                                "src": "2778:27:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 20782,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20780,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2806:3:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 20781,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2806:10:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "2778:39:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 20788,
                                  "name": "deltaAmountSignaled",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20769,
                                  "src": "2864:19:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20783,
                                    "name": "totalAmountSignaledByHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21173,
                                    "src": "2820:27:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 20786,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20784,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "2848:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20785,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "2848:10:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2820:39:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 20787,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 37473,
                                "src": "2820:43:62",
                                "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": 20789,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2820:64:62",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2778:106:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 20791,
                          "nodeType": "ExpressionStatement",
                          "src": "2778:106:62"
                        }
                      ]
                    }
                  },
                  "id": 20819,
                  "nodeType": "IfStatement",
                  "src": "2435:694:62",
                  "trueBody": {
                    "id": 20760,
                    "nodeType": "Block",
                    "src": "2458:147:62",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20743,
                              "name": "totalAmountSignaledByHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21173,
                              "src": "2472:27:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 20746,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20744,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2500:3:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 20745,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2500:10:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2472:39:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20752,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20693,
                                    "src": "2558:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  "id": 20753,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signaledAmounts",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21164,
                                  "src": "2558:23:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20756,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20754,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2582:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2582:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2558:35:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 20747,
                                  "name": "totalAmountSignaledByHolder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21173,
                                  "src": "2514:27:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20750,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20748,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2542:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20749,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2542:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2514:39:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "2514:43:62",
                              "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": 20757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2514:80:62",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2472:122:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20759,
                        "nodeType": "ExpressionStatement",
                        "src": "2472:122:62"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20820,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20693,
                        "src": "3191:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20822,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalAmountSignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21152,
                      "src": "3191:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20826,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20693,
                              "src": "3253:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 20827,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signaledAmounts",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21164,
                            "src": "3253:23:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20830,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20828,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3277:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20829,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3277:10:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3253:35:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20823,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "3221:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20824,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAmountSignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21152,
                          "src": "3221:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37473,
                        "src": "3221:31:62",
                        "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": 20831,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3221:68:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3191:98:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20833,
                  "nodeType": "ExpressionStatement",
                  "src": "3191:98:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20834,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20693,
                        "src": "3299:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20836,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalAmountSignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21152,
                      "src": "3299:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20840,
                          "name": "signalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20689,
                          "src": "3361:12:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20837,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "3329:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20838,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAmountSignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21152,
                          "src": "3329:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37456,
                        "src": "3329:31:62",
                        "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": 20841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3329:45:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3299:75:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20843,
                  "nodeType": "ExpressionStatement",
                  "src": "3299:75:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20844,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20693,
                          "src": "3432:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 20848,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signaledAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21164,
                        "src": "3432:23:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 20849,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20846,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3456:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20847,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3456:10:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3432:35:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20850,
                      "name": "signalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20689,
                      "src": "3470:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3432:50:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20852,
                  "nodeType": "ExpressionStatement",
                  "src": "3432:50:62"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "03952a7a",
            "id": 20854,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signalAmountForDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20687,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20854,
                  "src": "1606:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20686,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1606:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20689,
                  "mutability": "mutable",
                  "name": "signalAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20854,
                  "src": "1625:20:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1625:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1605:41:62"
            },
            "returnParameters": {
              "id": 20691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1654:0:62"
            },
            "scope": 21141,
            "src": "1574:1915:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20900,
              "nodeType": "Block",
              "src": "3793:260:62",
              "statements": [
                {
                  "assignments": [
                    20864
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20864,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20900,
                      "src": "3803:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20863,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "3803:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20868,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20865,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "3829:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20867,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20866,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20857,
                      "src": "3838:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3829:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3803:45:62"
                },
                {
                  "body": {
                    "id": 20898,
                    "nodeType": "Block",
                    "src": "3903:144:62",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 20887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20880,
                                "name": "deposit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20864,
                                "src": "3921:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                  "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                }
                              },
                              "id": 20881,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claimed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21160,
                              "src": "3921:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 20885,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20882,
                                "name": "payees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20860,
                                "src": "3937:6:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                  "typeString": "address payable[] memory"
                                }
                              },
                              "id": 20884,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 20883,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20870,
                                "src": "3944:1:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3937:9:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3921:26:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 20886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3951:5:62",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "3921:35:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20897,
                        "nodeType": "IfStatement",
                        "src": "3917:120:62",
                        "trueBody": {
                          "id": 20896,
                          "nodeType": "Block",
                          "src": "3958:79:62",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 20889,
                                      "name": "payees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20860,
                                      "src": "3992:6:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                        "typeString": "address payable[] memory"
                                      }
                                    },
                                    "id": 20891,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 20890,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20870,
                                      "src": "3999:1:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3992:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 20892,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20864,
                                    "src": "4003:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 20893,
                                    "name": "depositId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20857,
                                    "src": "4012:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 20888,
                                  "name": "transferDeposit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21001,
                                  "src": "3976:15:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Deposit_$21165_storage_ptr_$_t_bytes32_$returns$__$",
                                    "typeString": "function (address,struct DepositAllocaterStorage.Deposit storage pointer,bytes32)"
                                  }
                                },
                                "id": 20894,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3976:46:62",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 20895,
                              "nodeType": "ExpressionStatement",
                              "src": "3976:46:62"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20873,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20870,
                      "src": "3879:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20874,
                        "name": "payees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "3883:6:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 20875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3883:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3879:17:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20899,
                  "initializationExpression": {
                    "assignments": [
                      20870
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 20870,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 20899,
                        "src": "3864:9:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20869,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3864:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 20872,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3876:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3864:13:62"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3898:3:62",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20877,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20870,
                        "src": "3898:1:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20879,
                    "nodeType": "ExpressionStatement",
                    "src": "3898:3:62"
                  },
                  "nodeType": "ForStatement",
                  "src": "3859:188:62"
                }
              ]
            },
            "documentation": {
              "id": 20855,
              "nodeType": "StructuredDocumentation",
              "src": "3495:170:62",
              "text": " @notice Issuer can push funds to provided addresses\n @param depositId Id of the deposit\n @param payees Addresses to which to push the funds"
            },
            "functionSelector": "c20662c3",
            "id": 20901,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pushFundsToAddresses",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20857,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20901,
                  "src": "3709:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20856,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3709:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20860,
                  "mutability": "mutable",
                  "name": "payees",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20901,
                  "src": "3736:31:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 20858,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3736:15:62",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 20859,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3736:17:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3699:74:62"
            },
            "returnParameters": {
              "id": 20862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3793:0:62"
            },
            "scope": 21141,
            "src": "3670:383:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20931,
              "nodeType": "Block",
              "src": "4232:259:62",
              "statements": [
                {
                  "assignments": [
                    20908
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20908,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20931,
                      "src": "4242:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20907,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "4242:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20912,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20909,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "4268:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20911,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20910,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20904,
                      "src": "4277:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4268:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4242:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20914,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20908,
                              "src": "4319:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 20915,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claimed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21160,
                            "src": "4319:15:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 20918,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20916,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "4335:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4335:10:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4319:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 20919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4350:5:62",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "4319:36:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e636c61696d4465706f7369743a204445504f5349545f414c52454144595f434c41494d4544",
                        "id": 20921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4369:47:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_84f0c540dd7bf71a230554323f7879711a93882d0622b72b74a76d82f9c1459b",
                          "typeString": "literal_string \"Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED\""
                        },
                        "value": "Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_84f0c540dd7bf71a230554323f7879711a93882d0622b72b74a76d82f9c1459b",
                          "typeString": "literal_string \"Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED\""
                        }
                      ],
                      "id": 20913,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4298:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4298:128:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20923,
                  "nodeType": "ExpressionStatement",
                  "src": "4298:128:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20925,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4453:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20926,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4453:10:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20927,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20908,
                        "src": "4465:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20928,
                        "name": "depositId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20904,
                        "src": "4474:9:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 20924,
                      "name": "transferDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21001,
                      "src": "4437:15:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Deposit_$21165_storage_ptr_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,struct DepositAllocaterStorage.Deposit storage pointer,bytes32)"
                      }
                    },
                    "id": 20929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4437:47:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20930,
                  "nodeType": "ExpressionStatement",
                  "src": "4437:47:62"
                }
              ]
            },
            "documentation": {
              "id": 20902,
              "nodeType": "StructuredDocumentation",
              "src": "4059:120:62",
              "text": " @notice Withdraws the holders share of funds of the deposit\n @param depositId Id of the deposit"
            },
            "functionSelector": "5e585889",
            "id": 20932,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20904,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20932,
                  "src": "4206:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20903,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4206:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4205:19:62"
            },
            "returnParameters": {
              "id": 20906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4232:0:62"
            },
            "scope": 21141,
            "src": "4184:307:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21000,
              "nodeType": "Block",
              "src": "4836:606:62",
              "statements": [
                {
                  "assignments": [
                    20945
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20945,
                      "mutability": "mutable",
                      "name": "claim",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21000,
                      "src": "4846:13:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20944,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4846:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20950,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20947,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20935,
                        "src": "4886:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20948,
                        "name": "depositId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20939,
                        "src": "4893:9:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 20946,
                      "name": "calculateClaimOnDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21067,
                      "src": "4862:23:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes32) view returns (uint256)"
                      }
                    },
                    "id": 20949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4862:41:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4846:57:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20951,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20937,
                          "src": "4914:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 20954,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "claimed",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21160,
                        "src": "4914:15:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 20955,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20953,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20935,
                        "src": "4930:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4914:22:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4939:4:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4914:29:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20958,
                  "nodeType": "ExpressionStatement",
                  "src": "4914:29:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20959,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20937,
                        "src": "4953:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20961,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "claimedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21150,
                      "src": "4953:21:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20964,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20937,
                            "src": "4987:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20965,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "claimedAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21150,
                          "src": "4987:21:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 20962,
                          "name": "claim",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20945,
                          "src": "4977:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37456,
                        "src": "4977:9:62",
                        "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": 20966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4977:32:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4953:56:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20968,
                  "nodeType": "ExpressionStatement",
                  "src": "4953:56:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20969,
                        "name": "totalAmountSignaledByHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21173,
                        "src": "5135:27:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 20971,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20970,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20935,
                        "src": "5163:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5135:34:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20976,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20937,
                              "src": "5211:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 20977,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signaledAmounts",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21164,
                            "src": "5211:23:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20979,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20978,
                            "name": "payee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20935,
                            "src": "5235:5:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5211:30:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 20972,
                            "name": "totalAmountSignaledByHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21173,
                            "src": "5172:27:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20974,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20973,
                            "name": "payee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20935,
                            "src": "5200:5:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5172:34:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37473,
                        "src": "5172:38:62",
                        "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": 20980,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5172:70:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5135:107:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20982,
                  "nodeType": "ExpressionStatement",
                  "src": "5135:107:62"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20983,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20945,
                      "src": "5257:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20984,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5265:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5257:9:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20999,
                  "nodeType": "IfStatement",
                  "src": "5253:183:62",
                  "trueBody": {
                    "id": 20998,
                    "nodeType": "Block",
                    "src": "5268:168:62",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 20992,
                                  "name": "payee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20935,
                                  "src": "5338:5:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 20993,
                                  "name": "claim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20945,
                                  "src": "5345:5:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20988,
                                        "name": "deposit",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20937,
                                        "src": "5314:7:62",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                        }
                                      },
                                      "id": 20989,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "token",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21154,
                                      "src": "5314:13:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 20987,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 38235,
                                    "src": "5307:6:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$38235_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 20990,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5307:21:62",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$38235",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 20991,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 38184,
                                "src": "5307:30:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 20994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5307:44:62",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4465706f7369742e7472616e736665724465706f7369743a205452414e534645525f4641494c4544",
                              "id": 20995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5369:42:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f55af77988abfaad55a14872e1fae5d6e55e7b6b5d282cba02bcfa348e2e9d9b",
                                "typeString": "literal_string \"Deposit.transferDeposit: TRANSFER_FAILED\""
                              },
                              "value": "Deposit.transferDeposit: TRANSFER_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f55af77988abfaad55a14872e1fae5d6e55e7b6b5d282cba02bcfa348e2e9d9b",
                                "typeString": "literal_string \"Deposit.transferDeposit: TRANSFER_FAILED\""
                              }
                            ],
                            "id": 20986,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5282:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5282:143:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20997,
                        "nodeType": "ExpressionStatement",
                        "src": "5282:143:62"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 20933,
              "nodeType": "StructuredDocumentation",
              "src": "4497:160:62",
              "text": " @notice Internal function for transferring deposits\n @param payee Address of holder\n @param deposit Pointer to deposit in storage"
            },
            "id": 21001,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 20942,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20941,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 38344,
                  "src": "4817:12:62",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4817:14:62"
              }
            ],
            "name": "transferDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20935,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21001,
                  "src": "4696:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20934,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4696:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20937,
                  "mutability": "mutable",
                  "name": "deposit",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21001,
                  "src": "4719:23:62",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                    "typeString": "struct DepositAllocaterStorage.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20936,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21165,
                    "src": "4719:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                      "typeString": "struct DepositAllocaterStorage.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20939,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21001,
                  "src": "4752:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20938,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4752:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4686:89:62"
            },
            "returnParameters": {
              "id": 20943,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4836:0:62"
            },
            "scope": 21141,
            "src": "4662:780:62",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21066,
              "nodeType": "Block",
              "src": "5750:766:62",
              "statements": [
                {
                  "assignments": [
                    21012
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21012,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "5760:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 21011,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "5760:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21016,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 21013,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "5786:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 21015,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21014,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21006,
                      "src": "5795:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5786:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5760:45:62"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21017,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21012,
                        "src": "5820:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21018,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21160,
                      "src": "5820:15:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 21020,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21019,
                      "name": "payee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21004,
                      "src": "5836:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5820:22:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21023,
                  "nodeType": "IfStatement",
                  "src": "5816:36:62",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5851:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 21010,
                    "id": 21022,
                    "nodeType": "Return",
                    "src": "5844:8:62"
                  }
                },
                {
                  "assignments": [
                    21025
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21025,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "5863:19:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21024,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5863:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21030,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21027,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21012,
                          "src": "5899:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 21028,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "scheduledFor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21146,
                        "src": "5899:20:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21026,
                      "name": "totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20330,
                      "src": "5885:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 21029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5885:35:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5863:57:62"
                },
                {
                  "assignments": [
                    21032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21032,
                      "mutability": "mutable",
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "6067:15:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21031,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6067:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21046,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21033,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21012,
                            "src": "6086:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 21034,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "onlySignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21156,
                          "src": "6086:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21035,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "6085:22:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21041,
                          "name": "payee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21004,
                          "src": "6179:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21042,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21012,
                            "src": "6186:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 21043,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "6186:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 21040,
                        "name": "balanceOfAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20316,
                        "src": "6167:11:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (address,uint256) view returns (uint256)"
                        }
                      },
                      "id": 21044,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6167:40:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6085:122:62",
                    "trueExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21036,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21012,
                          "src": "6122:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 21037,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signaledAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21164,
                        "src": "6122:23:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21039,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21038,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21004,
                        "src": "6146:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6122:30:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6067:140:62"
                },
                {
                  "assignments": [
                    21048
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21048,
                      "mutability": "mutable",
                      "name": "claim",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "6349:13:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21047,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6349:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21063,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21055,
                                "name": "deposit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21012,
                                "src": "6411:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                  "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                }
                              },
                              "id": 21056,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "onlySignaled",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21156,
                              "src": "6411:20:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 21057,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6410:22:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "id": 21060,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21025,
                          "src": "6465:11:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21061,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "6410:66:62",
                        "trueExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21058,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21012,
                            "src": "6435:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 21059,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAmountSignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21152,
                          "src": "6435:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21051,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21012,
                              "src": "6377:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 21052,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21148,
                            "src": "6377:14:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 21049,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21032,
                            "src": "6365:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 21050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 37536,
                          "src": "6365:11:62",
                          "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": 21053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6365:27:62",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 21054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37553,
                      "src": "6365:31:62",
                      "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": 21062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6365:121:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6349:137:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21064,
                    "name": "claim",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21048,
                    "src": "6504:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 21010,
                  "id": 21065,
                  "nodeType": "Return",
                  "src": "6497:12:62"
                }
              ]
            },
            "documentation": {
              "id": 21002,
              "nodeType": "StructuredDocumentation",
              "src": "5448:201:62",
              "text": " @notice Calculate claimable amount of a deposit for a given address\n @param payee Address of holder\n @param depositId Id of the deposit\n @return withdrawable amount"
            },
            "functionSelector": "7a22402c",
            "id": 21067,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateClaimOnDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21004,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21067,
                  "src": "5687:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5687:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21006,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21067,
                  "src": "5702:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21005,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5702:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5686:34:62"
            },
            "returnParameters": {
              "id": 21010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21009,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21067,
                  "src": "5741:7:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21008,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5741:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5740:9:62"
            },
            "scope": 21141,
            "src": "5654:862:62",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21121,
              "nodeType": "Block",
              "src": "7038:323:62",
              "statements": [
                {
                  "assignments": [
                    21086
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21086,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21121,
                      "src": "7048:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 21085,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "7048:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21090,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 21087,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "7074:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 21089,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21088,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21070,
                      "src": "7083:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7074:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7048:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21091,
                      "name": "scheduledFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21073,
                      "src": "7104:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21092,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7119:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21093,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "scheduledFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21146,
                      "src": "7119:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7104:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21095,
                  "nodeType": "ExpressionStatement",
                  "src": "7104:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21096,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21075,
                      "src": "7149:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21097,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7158:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21098,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21148,
                      "src": "7158:14:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7149:23:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21100,
                  "nodeType": "ExpressionStatement",
                  "src": "7149:23:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21101,
                      "name": "claimedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21077,
                      "src": "7182:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21102,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7198:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21103,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21150,
                      "src": "7198:21:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7182:37:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21105,
                  "nodeType": "ExpressionStatement",
                  "src": "7182:37:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21106,
                      "name": "totalAmountSignaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21079,
                      "src": "7229:19:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21107,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7251:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21108,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalAmountSignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21152,
                      "src": "7251:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7229:49:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21110,
                  "nodeType": "ExpressionStatement",
                  "src": "7229:49:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21111,
                      "name": "onlySignaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21081,
                      "src": "7288:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21112,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7303:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21113,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "onlySignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21156,
                      "src": "7303:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7288:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21115,
                  "nodeType": "ExpressionStatement",
                  "src": "7288:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21116,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21083,
                      "src": "7333:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21117,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7341:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21118,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21154,
                      "src": "7341:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7333:21:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21120,
                  "nodeType": "ExpressionStatement",
                  "src": "7333:21:62"
                }
              ]
            },
            "documentation": {
              "id": 21068,
              "nodeType": "StructuredDocumentation",
              "src": "6522:217:62",
              "text": " @notice Returns params of a deposit\n @return scheduledFor\n @return amount\n @return claimedAmount\n @return totalAmountSignaled\n @return onlySignaled\n @return token"
            },
            "functionSelector": "7a86983f",
            "id": 21122,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21070,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6764:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21069,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6764:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6763:19:62"
            },
            "returnParameters": {
              "id": 21084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21073,
                  "mutability": "mutable",
                  "name": "scheduledFor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6841:20:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21072,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6841:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21075,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6875:14:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6875:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21077,
                  "mutability": "mutable",
                  "name": "claimedAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6903:21:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6903:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21079,
                  "mutability": "mutable",
                  "name": "totalAmountSignaled",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6938:27:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6938:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21081,
                  "mutability": "mutable",
                  "name": "onlySignaled",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6979:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21080,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6979:4:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21083,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "7010:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7010:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6827:206:62"
            },
            "scope": 21141,
            "src": "6744:617:62",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21139,
              "nodeType": "Block",
              "src": "7643:59:62",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21132,
                          "name": "deposits",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21169,
                          "src": "7660:8:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                            "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                          }
                        },
                        "id": 21134,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21133,
                          "name": "depositId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21127,
                          "src": "7669:9:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7660:19:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                        }
                      },
                      "id": 21135,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21160,
                      "src": "7660:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 21137,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21136,
                      "name": "holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21125,
                      "src": "7688:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7660:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 21131,
                  "id": 21138,
                  "nodeType": "Return",
                  "src": "7653:42:62"
                }
              ]
            },
            "documentation": {
              "id": 21123,
              "nodeType": "StructuredDocumentation",
              "src": "7367:180:62",
              "text": " @notice Checks whether an address has withdrawn funds for a deposit\n @param depositId Id of the deposit\n @return bool whether the address has claimed"
            },
            "functionSelector": "76fa0e46",
            "id": 21140,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasClaimedDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21125,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21140,
                  "src": "7579:14:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7579:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21127,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21140,
                  "src": "7595:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21126,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7595:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7578:35:62"
            },
            "returnParameters": {
              "id": 21131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21130,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21140,
                  "src": "7637:4:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21129,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7637:4:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7636:6:62"
            },
            "scope": 21141,
            "src": "7552:150:62",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 21142,
        "src": "544:7160:62"
      }
    ],
    "src": "41:7664:62"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocater.sol",
    "exportedSymbols": {
      "DepositAllocater": [
        21141
      ]
    },
    "id": 21142,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 20580,
        "literals": [
          "solidity",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:23:62"
      },
      {
        "id": 20581,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "65:33:62"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol",
        "id": 20582,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 37624,
        "src": "100:78:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "id": 20583,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 38350,
        "src": "179:86:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedToken.sol",
        "file": "./CheckpointedToken/CheckpointedToken.sol",
        "id": 20584,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 20551,
        "src": "267:51:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol",
        "id": 20585,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 38350,
        "src": "319:86:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/DepositAllocaterStorage.sol",
        "file": "./DepositAllocaterStorage.sol",
        "id": 20586,
        "nodeType": "ImportDirective",
        "scope": 21142,
        "sourceUnit": 21179,
        "src": "406:39:62",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20588,
              "name": "CheckpointedToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20550,
              "src": "573:17:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckpointedToken_$20550",
                "typeString": "contract CheckpointedToken"
              }
            },
            "id": 20589,
            "nodeType": "InheritanceSpecifier",
            "src": "573:17:62"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20590,
              "name": "DepositAllocaterStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21178,
              "src": "592:23:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositAllocaterStorage_$21178",
                "typeString": "contract DepositAllocaterStorage"
              }
            },
            "id": 20591,
            "nodeType": "InheritanceSpecifier",
            "src": "592:23:62"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20592,
              "name": "ReentrancyGuardUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 38349,
              "src": "617:26:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuardUpgradeSafe_$38349",
                "typeString": "contract ReentrancyGuardUpgradeSafe"
              }
            },
            "id": 20593,
            "nodeType": "InheritanceSpecifier",
            "src": "617:26:62"
          }
        ],
        "contractDependencies": [
          19984,
          19992,
          20550,
          20578,
          21178,
          37222,
          37297,
          38157,
          38235,
          38349
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 20587,
          "nodeType": "StructuredDocumentation",
          "src": "448:95:62",
          "text": " @title Logic for distributing funds based on checkpointing\n @dev abstract contract"
        },
        "fullyImplemented": true,
        "id": 21141,
        "linearizedBaseContracts": [
          21141,
          38349,
          21178,
          20550,
          20578,
          19984,
          19992,
          38157,
          38235,
          37222,
          37297
        ],
        "name": "DepositAllocater",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20596,
            "libraryName": {
              "contractScope": null,
              "id": 20594,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37623,
              "src": "657:8:62",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$37623",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "651:27:62",
            "typeName": {
              "id": 20595,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "670:7:62",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 20642,
              "nodeType": "Block",
              "src": "790:321:62",
              "statements": [
                {
                  "assignments": [
                    20608
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20608,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20642,
                      "src": "800:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20607,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "800:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20612,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20609,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "826:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20611,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20610,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20598,
                      "src": "835:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "826:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "800:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20614,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20608,
                            "src": "877:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20615,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "877:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "909:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "901:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20616,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "901:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "901:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "877:34:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e6372656174654465706f7369743a204445504f5349545f414c52454144595f455849535453",
                        "id": 20621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "925:47:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5eaeba7c93b90f993c30a6704edd891a467e090e3e574ee2fc8c24d8ca538151",
                          "typeString": "literal_string \"Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS\""
                        },
                        "value": "Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5eaeba7c93b90f993c30a6704edd891a467e090e3e574ee2fc8c24d8ca538151",
                          "typeString": "literal_string \"Deposit.createDeposit: DEPOSIT_ALREADY_EXISTS\""
                        }
                      ],
                      "id": 20613,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "856:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "856:126:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20623,
                  "nodeType": "ExpressionStatement",
                  "src": "856:126:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20624,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20608,
                        "src": "993:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20626,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "scheduledFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21146,
                      "src": "993:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20627,
                      "name": "scheduledFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20600,
                      "src": "1016:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "993:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20629,
                  "nodeType": "ExpressionStatement",
                  "src": "993:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20630,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20608,
                        "src": "1038:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20632,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "onlySignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21156,
                      "src": "1038:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20633,
                      "name": "onlySignaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20602,
                      "src": "1061:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1038:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20635,
                  "nodeType": "ExpressionStatement",
                  "src": "1038:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20636,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20608,
                        "src": "1083:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20638,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21154,
                      "src": "1083:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20639,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20604,
                      "src": "1099:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1083:21:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 20641,
                  "nodeType": "ExpressionStatement",
                  "src": "1083:21:62"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "302424ea",
            "id": 20643,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20598,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "708:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "708:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20600,
                  "mutability": "mutable",
                  "name": "scheduledFor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "727:20:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20599,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "727:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20602,
                  "mutability": "mutable",
                  "name": "onlySignaled",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "749:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20601,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "749:4:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20604,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20643,
                  "src": "768:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "768:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "707:75:62"
            },
            "returnParameters": {
              "id": 20606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "790:0:62"
            },
            "scope": 21141,
            "src": "685:426:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20684,
              "nodeType": "Block",
              "src": "1188:380:62",
              "statements": [
                {
                  "assignments": [
                    20651
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20651,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20684,
                      "src": "1198:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20650,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "1198:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20655,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20652,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "1224:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20654,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20653,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20645,
                      "src": "1233:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1224:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1198:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20657,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20651,
                            "src": "1275:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20658,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "1275:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1307:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1299:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20659,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1299:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1299:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1275:34:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7570646174654465706f736974416d6f756e743a204445504f5349545f444f45535f4e4f545f4558495354",
                        "id": 20664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1323:53:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_adcd2871d2d832b6f8adc2469dac32ff1f13ed3fd8ce64e9ba72771446bbf61b",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST\""
                        },
                        "value": "Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_adcd2871d2d832b6f8adc2469dac32ff1f13ed3fd8ce64e9ba72771446bbf61b",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_DOES_NOT_EXIST\""
                        }
                      ],
                      "id": 20656,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1254:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1254:132:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20666,
                  "nodeType": "ExpressionStatement",
                  "src": "1254:132:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20668,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20651,
                            "src": "1418:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20669,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21148,
                          "src": "1418:14:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20672,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1444:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1436:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20670,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1436:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1436:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1418:28:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7570646174654465706f736974416d6f756e743a204445504f5349545f414d4f554e545f414c52454144595f534554",
                        "id": 20675,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1460:57:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_16bf5d6d1692e2ed592673684ae298f40190546f78c26700b70bb9b020c2a07c",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET\""
                        },
                        "value": "Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_16bf5d6d1692e2ed592673684ae298f40190546f78c26700b70bb9b020c2a07c",
                          "typeString": "literal_string \"Deposit.updateDepositAmount: DEPOSIT_AMOUNT_ALREADY_SET\""
                        }
                      ],
                      "id": 20667,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1397:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1397:130:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20677,
                  "nodeType": "ExpressionStatement",
                  "src": "1397:130:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20678,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20651,
                        "src": "1538:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20680,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21148,
                      "src": "1538:14:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20681,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20647,
                      "src": "1555:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1538:23:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20683,
                  "nodeType": "ExpressionStatement",
                  "src": "1538:23:62"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "a999b73f",
            "id": 20685,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateDepositAmount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20645,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20685,
                  "src": "1146:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20644,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1146:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20647,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20685,
                  "src": "1165:14:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20646,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1165:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1145:35:62"
            },
            "returnParameters": {
              "id": 20649,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1188:0:62"
            },
            "scope": 21141,
            "src": "1117:451:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20853,
              "nodeType": "Block",
              "src": "1654:1835:62",
              "statements": [
                {
                  "assignments": [
                    20693
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20693,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20853,
                      "src": "1664:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20692,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "1664:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20697,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20694,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "1690:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20696,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20695,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20687,
                      "src": "1699:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1690:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1664:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20699,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "1741:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20700,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "1741:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1773:1:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 20702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1765:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 20701,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1765:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 20704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1765:10:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1741:34:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a204445504f5349545f444f45535f4e4f545f4558495354",
                        "id": 20706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1789:56:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_92257904552c58398d9274810af1daf80cdeff465abbf90dc9a755734276b614",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST\""
                        },
                        "value": "Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_92257904552c58398d9274810af1daf80cdeff465abbf90dc9a755734276b614",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_DOES_NOT_EXIST\""
                        }
                      ],
                      "id": 20698,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1720:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1720:135:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20708,
                  "nodeType": "ExpressionStatement",
                  "src": "1720:135:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20710,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "1887:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20711,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "onlySignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21156,
                          "src": "1887:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 20712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1911:4:62",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "1887:28:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a205349474e414c494e475f4e4f545f454e41424c4544",
                        "id": 20714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1929:55:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0a7d425a3f36c44c0251bfb2d63fef0479a5f9b39560e06042caf2ce76e0cda3",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED\""
                        },
                        "value": "Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0a7d425a3f36c44c0251bfb2d63fef0479a5f9b39560e06042caf2ce76e0cda3",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNALING_NOT_ENABLED\""
                        }
                      ],
                      "id": 20709,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1866:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1866:128:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20716,
                  "nodeType": "ExpressionStatement",
                  "src": "1866:128:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20718,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "2026:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20719,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "2026:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20720,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -17,
                          "src": "2049:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2026:26:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a204445504f5349545f49535f414c52454144595f50524f434553534544",
                        "id": 20722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2066:62:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dfe0564ca6d329d1c74c16277cc04750915bda9c19f0b471d39682dbc5970d60",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED\""
                        },
                        "value": "Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dfe0564ca6d329d1c74c16277cc04750915bda9c19f0b471d39682dbc5970d60",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: DEPOSIT_IS_ALREADY_PROCESSED\""
                        }
                      ],
                      "id": 20717,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2005:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2005:133:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20724,
                  "nodeType": "ExpressionStatement",
                  "src": "2005:133:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 20726,
                            "name": "totalAmountSignaledByHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21173,
                            "src": "2170:27:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20729,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20727,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "2198:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2198:10:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2170:39:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20731,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2225:3:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 20732,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2225:10:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20733,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "2237:5:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 20734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2237:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 20730,
                            "name": "balanceOfAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20316,
                            "src": "2213:11:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 20735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2213:40:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2170:83:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e7369676e616c416d6f756e74466f724465706f7369743a205349474e414c5f414d4f554e545f455843454544535f42414c414e4345",
                        "id": 20737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2267:63:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e8121dd3110d5eca51645f6a19c85212783e1981df5e4e4ef9eb7c9af67d4663",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE\""
                        },
                        "value": "Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e8121dd3110d5eca51645f6a19c85212783e1981df5e4e4ef9eb7c9af67d4663",
                          "typeString": "literal_string \"Deposit.signalAmountForDeposit: SIGNAL_AMOUNT_EXCEEDS_BALANCE\""
                        }
                      ],
                      "id": 20725,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2149:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2149:191:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20739,
                  "nodeType": "ExpressionStatement",
                  "src": "2149:191:62"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20740,
                      "name": "signalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20689,
                      "src": "2439:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20741,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2455:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2439:17:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 20761,
                        "name": "signalAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20689,
                        "src": "2615:12:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20762,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "2630:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20763,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signaledAmounts",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21164,
                          "src": "2630:23:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 20766,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20764,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2654:3:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 20765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2654:10:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2630:35:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2615:50:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 20817,
                      "nodeType": "Block",
                      "src": "2901:228:62",
                      "statements": [
                        {
                          "assignments": [
                            20794
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 20794,
                              "mutability": "mutable",
                              "name": "deltaAmountSignaled",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 20817,
                              "src": "2915:27:62",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 20793,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2915:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 20803,
                          "initialValue": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20797,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20693,
                                    "src": "2962:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  "id": 20798,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signaledAmounts",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21164,
                                  "src": "2962:23:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20801,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20799,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2986:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20800,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2986:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2962:35:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 20795,
                                "name": "signalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20689,
                                "src": "2945:12:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "2945:16:62",
                              "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": 20802,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2945:53:62",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2915:83:62"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 20815,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20804,
                                "name": "totalAmountSignaledByHolder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21173,
                                "src": "3012:27:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 20807,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20805,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "3040:3:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 20806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3040:10:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "3012:39:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 20813,
                                  "name": "deltaAmountSignaled",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20794,
                                  "src": "3098:19:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20808,
                                    "name": "totalAmountSignaledByHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21173,
                                    "src": "3054:27:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 20811,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20809,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "3082:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20810,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3082:10:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "3054:39:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 20812,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 37456,
                                "src": "3054:43:62",
                                "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": 20814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3054:64:62",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3012:106:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 20816,
                          "nodeType": "ExpressionStatement",
                          "src": "3012:106:62"
                        }
                      ]
                    },
                    "id": 20818,
                    "nodeType": "IfStatement",
                    "src": "2611:518:62",
                    "trueBody": {
                      "id": 20792,
                      "nodeType": "Block",
                      "src": "2667:228:62",
                      "statements": [
                        {
                          "assignments": [
                            20769
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 20769,
                              "mutability": "mutable",
                              "name": "deltaAmountSignaled",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 20792,
                              "src": "2681:27:62",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 20768,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2681:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 20778,
                          "initialValue": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20776,
                                "name": "signalAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20689,
                                "src": "2751:12:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20770,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20693,
                                    "src": "2711:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  "id": 20771,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signaledAmounts",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21164,
                                  "src": "2711:23:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20774,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20772,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2735:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20773,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2735:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2711:35:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "2711:39:62",
                              "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": 20777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2711:53:62",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2681:83:62"
                        },
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 20790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20779,
                                "name": "totalAmountSignaledByHolder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21173,
                                "src": "2778:27:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 20782,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 20780,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2806:3:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 20781,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "2806:10:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "2778:39:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 20788,
                                  "name": "deltaAmountSignaled",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20769,
                                  "src": "2864:19:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20783,
                                    "name": "totalAmountSignaledByHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21173,
                                    "src": "2820:27:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 20786,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20784,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "2848:3:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20785,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "2848:10:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2820:39:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 20787,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 37473,
                                "src": "2820:43:62",
                                "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": 20789,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2820:64:62",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2778:106:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 20791,
                          "nodeType": "ExpressionStatement",
                          "src": "2778:106:62"
                        }
                      ]
                    }
                  },
                  "id": 20819,
                  "nodeType": "IfStatement",
                  "src": "2435:694:62",
                  "trueBody": {
                    "id": 20760,
                    "nodeType": "Block",
                    "src": "2458:147:62",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20743,
                              "name": "totalAmountSignaledByHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21173,
                              "src": "2472:27:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 20746,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20744,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2500:3:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 20745,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "2500:10:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2472:39:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20752,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20693,
                                    "src": "2558:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  "id": 20753,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "signaledAmounts",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 21164,
                                  "src": "2558:23:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20756,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20754,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2582:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2582:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2558:35:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 20747,
                                  "name": "totalAmountSignaledByHolder",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21173,
                                  "src": "2514:27:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 20750,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20748,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2542:3:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20749,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2542:10:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2514:39:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "2514:43:62",
                              "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": 20757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2514:80:62",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2472:122:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20759,
                        "nodeType": "ExpressionStatement",
                        "src": "2472:122:62"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20820,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20693,
                        "src": "3191:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20822,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalAmountSignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21152,
                      "src": "3191:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20826,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20693,
                              "src": "3253:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 20827,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signaledAmounts",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21164,
                            "src": "3253:23:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20830,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20828,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "3277:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20829,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3277:10:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3253:35:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20823,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "3221:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20824,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAmountSignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21152,
                          "src": "3221:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37473,
                        "src": "3221:31:62",
                        "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": 20831,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3221:68:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3191:98:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20833,
                  "nodeType": "ExpressionStatement",
                  "src": "3191:98:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20834,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20693,
                        "src": "3299:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20836,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalAmountSignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21152,
                      "src": "3299:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20840,
                          "name": "signalAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20689,
                          "src": "3361:12:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20837,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20693,
                            "src": "3329:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20838,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAmountSignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21152,
                          "src": "3329:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37456,
                        "src": "3329:31:62",
                        "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": 20841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3329:45:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3299:75:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20843,
                  "nodeType": "ExpressionStatement",
                  "src": "3299:75:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20844,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20693,
                          "src": "3432:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 20848,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signaledAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21164,
                        "src": "3432:23:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 20849,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20846,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "3456:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20847,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3456:10:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3432:35:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20850,
                      "name": "signalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20689,
                      "src": "3470:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3432:50:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20852,
                  "nodeType": "ExpressionStatement",
                  "src": "3432:50:62"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "03952a7a",
            "id": 20854,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signalAmountForDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20687,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20854,
                  "src": "1606:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20686,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1606:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20689,
                  "mutability": "mutable",
                  "name": "signalAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20854,
                  "src": "1625:20:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1625:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1605:41:62"
            },
            "returnParameters": {
              "id": 20691,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1654:0:62"
            },
            "scope": 21141,
            "src": "1574:1915:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20900,
              "nodeType": "Block",
              "src": "3793:260:62",
              "statements": [
                {
                  "assignments": [
                    20864
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20864,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20900,
                      "src": "3803:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20863,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "3803:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20868,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20865,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "3829:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20867,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20866,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20857,
                      "src": "3838:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3829:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3803:45:62"
                },
                {
                  "body": {
                    "id": 20898,
                    "nodeType": "Block",
                    "src": "3903:144:62",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 20887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 20880,
                                "name": "deposit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20864,
                                "src": "3921:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                  "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                }
                              },
                              "id": 20881,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claimed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21160,
                              "src": "3921:15:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 20885,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20882,
                                "name": "payees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20860,
                                "src": "3937:6:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                  "typeString": "address payable[] memory"
                                }
                              },
                              "id": 20884,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 20883,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20870,
                                "src": "3944:1:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3937:9:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3921:26:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 20886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3951:5:62",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "3921:35:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20897,
                        "nodeType": "IfStatement",
                        "src": "3917:120:62",
                        "trueBody": {
                          "id": 20896,
                          "nodeType": "Block",
                          "src": "3958:79:62",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 20889,
                                      "name": "payees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20860,
                                      "src": "3992:6:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                                        "typeString": "address payable[] memory"
                                      }
                                    },
                                    "id": 20891,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 20890,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 20870,
                                      "src": "3999:1:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3992:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 20892,
                                    "name": "deposit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20864,
                                    "src": "4003:7:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 20893,
                                    "name": "depositId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20857,
                                    "src": "4012:9:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                      "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 20888,
                                  "name": "transferDeposit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21001,
                                  "src": "3976:15:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Deposit_$21165_storage_ptr_$_t_bytes32_$returns$__$",
                                    "typeString": "function (address,struct DepositAllocaterStorage.Deposit storage pointer,bytes32)"
                                  }
                                },
                                "id": 20894,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3976:46:62",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 20895,
                              "nodeType": "ExpressionStatement",
                              "src": "3976:46:62"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20873,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20870,
                      "src": "3879:1:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20874,
                        "name": "payees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "3883:6:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                          "typeString": "address payable[] memory"
                        }
                      },
                      "id": 20875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3883:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3879:17:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20899,
                  "initializationExpression": {
                    "assignments": [
                      20870
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 20870,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 20899,
                        "src": "3864:9:62",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20869,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3864:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 20872,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3876:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3864:13:62"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3898:3:62",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20877,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20870,
                        "src": "3898:1:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20879,
                    "nodeType": "ExpressionStatement",
                    "src": "3898:3:62"
                  },
                  "nodeType": "ForStatement",
                  "src": "3859:188:62"
                }
              ]
            },
            "documentation": {
              "id": 20855,
              "nodeType": "StructuredDocumentation",
              "src": "3495:170:62",
              "text": " @notice Issuer can push funds to provided addresses\n @param depositId Id of the deposit\n @param payees Addresses to which to push the funds"
            },
            "functionSelector": "c20662c3",
            "id": 20901,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pushFundsToAddresses",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20857,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20901,
                  "src": "3709:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20856,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3709:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20860,
                  "mutability": "mutable",
                  "name": "payees",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20901,
                  "src": "3736:31:62",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_memory_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 20858,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3736:15:62",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 20859,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3736:17:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3699:74:62"
            },
            "returnParameters": {
              "id": 20862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3793:0:62"
            },
            "scope": 21141,
            "src": "3670:383:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20931,
              "nodeType": "Block",
              "src": "4232:259:62",
              "statements": [
                {
                  "assignments": [
                    20908
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20908,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20931,
                      "src": "4242:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20907,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "4242:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20912,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20909,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "4268:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 20911,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20910,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20904,
                      "src": "4277:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4268:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4242:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 20920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20914,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20908,
                              "src": "4319:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 20915,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claimed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21160,
                            "src": "4319:15:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 20918,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20916,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "4335:3:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4335:10:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4319:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 20919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4350:5:62",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "4319:36:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f7369742e636c61696d4465706f7369743a204445504f5349545f414c52454144595f434c41494d4544",
                        "id": 20921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4369:47:62",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_84f0c540dd7bf71a230554323f7879711a93882d0622b72b74a76d82f9c1459b",
                          "typeString": "literal_string \"Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED\""
                        },
                        "value": "Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_84f0c540dd7bf71a230554323f7879711a93882d0622b72b74a76d82f9c1459b",
                          "typeString": "literal_string \"Deposit.claimDeposit: DEPOSIT_ALREADY_CLAIMED\""
                        }
                      ],
                      "id": 20913,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4298:7:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4298:128:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20923,
                  "nodeType": "ExpressionStatement",
                  "src": "4298:128:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20925,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4453:3:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20926,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4453:10:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20927,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20908,
                        "src": "4465:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20928,
                        "name": "depositId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20904,
                        "src": "4474:9:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 20924,
                      "name": "transferDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21001,
                      "src": "4437:15:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Deposit_$21165_storage_ptr_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,struct DepositAllocaterStorage.Deposit storage pointer,bytes32)"
                      }
                    },
                    "id": 20929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4437:47:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20930,
                  "nodeType": "ExpressionStatement",
                  "src": "4437:47:62"
                }
              ]
            },
            "documentation": {
              "id": 20902,
              "nodeType": "StructuredDocumentation",
              "src": "4059:120:62",
              "text": " @notice Withdraws the holders share of funds of the deposit\n @param depositId Id of the deposit"
            },
            "functionSelector": "5e585889",
            "id": 20932,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20904,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20932,
                  "src": "4206:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20903,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4206:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4205:19:62"
            },
            "returnParameters": {
              "id": 20906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4232:0:62"
            },
            "scope": 21141,
            "src": "4184:307:62",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21000,
              "nodeType": "Block",
              "src": "4836:606:62",
              "statements": [
                {
                  "assignments": [
                    20945
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20945,
                      "mutability": "mutable",
                      "name": "claim",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21000,
                      "src": "4846:13:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20944,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4846:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20950,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20947,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20935,
                        "src": "4886:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20948,
                        "name": "depositId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20939,
                        "src": "4893:9:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 20946,
                      "name": "calculateClaimOnDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21067,
                      "src": "4862:23:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes32) view returns (uint256)"
                      }
                    },
                    "id": 20949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4862:41:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4846:57:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20951,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20937,
                          "src": "4914:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 20954,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "claimed",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21160,
                        "src": "4914:15:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 20955,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20953,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20935,
                        "src": "4930:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4914:22:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4939:4:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4914:29:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20958,
                  "nodeType": "ExpressionStatement",
                  "src": "4914:29:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20959,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20937,
                        "src": "4953:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 20961,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "claimedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21150,
                      "src": "4953:21:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 20964,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20937,
                            "src": "4987:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 20965,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "claimedAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21150,
                          "src": "4987:21:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 20962,
                          "name": "claim",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20945,
                          "src": "4977:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37456,
                        "src": "4977:9:62",
                        "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": 20966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4977:32:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4953:56:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20968,
                  "nodeType": "ExpressionStatement",
                  "src": "4953:56:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20969,
                        "name": "totalAmountSignaledByHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21173,
                        "src": "5135:27:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 20971,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20970,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20935,
                        "src": "5163:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5135:34:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20976,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20937,
                              "src": "5211:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 20977,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "signaledAmounts",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21164,
                            "src": "5211:23:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20979,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20978,
                            "name": "payee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20935,
                            "src": "5235:5:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5211:30:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 20972,
                            "name": "totalAmountSignaledByHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21173,
                            "src": "5172:27:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 20974,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20973,
                            "name": "payee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20935,
                            "src": "5200:5:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5172:34:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 37473,
                        "src": "5172:38:62",
                        "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": 20980,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5172:70:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5135:107:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20982,
                  "nodeType": "ExpressionStatement",
                  "src": "5135:107:62"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20983,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20945,
                      "src": "5257:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20984,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5265:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5257:9:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20999,
                  "nodeType": "IfStatement",
                  "src": "5253:183:62",
                  "trueBody": {
                    "id": 20998,
                    "nodeType": "Block",
                    "src": "5268:168:62",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 20992,
                                  "name": "payee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20935,
                                  "src": "5338:5:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 20993,
                                  "name": "claim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20945,
                                  "src": "5345:5:62",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 20988,
                                        "name": "deposit",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20937,
                                        "src": "5314:7:62",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                        }
                                      },
                                      "id": 20989,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "token",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 21154,
                                      "src": "5314:13:62",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 20987,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 38235,
                                    "src": "5307:6:62",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$38235_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 20990,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5307:21:62",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$38235",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 20991,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 38184,
                                "src": "5307:30:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 20994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5307:44:62",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4465706f7369742e7472616e736665724465706f7369743a205452414e534645525f4641494c4544",
                              "id": 20995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5369:42:62",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f55af77988abfaad55a14872e1fae5d6e55e7b6b5d282cba02bcfa348e2e9d9b",
                                "typeString": "literal_string \"Deposit.transferDeposit: TRANSFER_FAILED\""
                              },
                              "value": "Deposit.transferDeposit: TRANSFER_FAILED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f55af77988abfaad55a14872e1fae5d6e55e7b6b5d282cba02bcfa348e2e9d9b",
                                "typeString": "literal_string \"Deposit.transferDeposit: TRANSFER_FAILED\""
                              }
                            ],
                            "id": 20986,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5282:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5282:143:62",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20997,
                        "nodeType": "ExpressionStatement",
                        "src": "5282:143:62"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 20933,
              "nodeType": "StructuredDocumentation",
              "src": "4497:160:62",
              "text": " @notice Internal function for transferring deposits\n @param payee Address of holder\n @param deposit Pointer to deposit in storage"
            },
            "id": 21001,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 20942,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20941,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 38344,
                  "src": "4817:12:62",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4817:14:62"
              }
            ],
            "name": "transferDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20935,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21001,
                  "src": "4696:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20934,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4696:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20937,
                  "mutability": "mutable",
                  "name": "deposit",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21001,
                  "src": "4719:23:62",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                    "typeString": "struct DepositAllocaterStorage.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 20936,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21165,
                    "src": "4719:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                      "typeString": "struct DepositAllocaterStorage.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20939,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21001,
                  "src": "4752:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20938,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4752:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4686:89:62"
            },
            "returnParameters": {
              "id": 20943,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4836:0:62"
            },
            "scope": 21141,
            "src": "4662:780:62",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21066,
              "nodeType": "Block",
              "src": "5750:766:62",
              "statements": [
                {
                  "assignments": [
                    21012
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21012,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "5760:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 21011,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "5760:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21016,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 21013,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "5786:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 21015,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21014,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21006,
                      "src": "5795:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5786:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5760:45:62"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21017,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21012,
                        "src": "5820:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21018,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21160,
                      "src": "5820:15:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 21020,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21019,
                      "name": "payee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21004,
                      "src": "5836:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5820:22:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21023,
                  "nodeType": "IfStatement",
                  "src": "5816:36:62",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5851:1:62",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 21010,
                    "id": 21022,
                    "nodeType": "Return",
                    "src": "5844:8:62"
                  }
                },
                {
                  "assignments": [
                    21025
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21025,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "5863:19:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21024,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5863:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21030,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21027,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21012,
                          "src": "5899:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 21028,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "scheduledFor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21146,
                        "src": "5899:20:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21026,
                      "name": "totalSupplyAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20330,
                      "src": "5885:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 21029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5885:35:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5863:57:62"
                },
                {
                  "assignments": [
                    21032
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21032,
                      "mutability": "mutable",
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "6067:15:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21031,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6067:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21046,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21033,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21012,
                            "src": "6086:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 21034,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "onlySignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21156,
                          "src": "6086:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21035,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "6085:22:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21041,
                          "name": "payee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21004,
                          "src": "6179:5:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21042,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21012,
                            "src": "6186:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 21043,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scheduledFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21146,
                          "src": "6186:20:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 21040,
                        "name": "balanceOfAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20316,
                        "src": "6167:11:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (address,uint256) view returns (uint256)"
                        }
                      },
                      "id": 21044,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6167:40:62",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6085:122:62",
                    "trueExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21036,
                          "name": "deposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21012,
                          "src": "6122:7:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                            "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                          }
                        },
                        "id": 21037,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signaledAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21164,
                        "src": "6122:23:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21039,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21038,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21004,
                        "src": "6146:5:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6122:30:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6067:140:62"
                },
                {
                  "assignments": [
                    21048
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21048,
                      "mutability": "mutable",
                      "name": "claim",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21066,
                      "src": "6349:13:62",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21047,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6349:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21063,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "condition": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 21055,
                                "name": "deposit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21012,
                                "src": "6411:7:62",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                  "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                                }
                              },
                              "id": 21056,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "onlySignaled",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21156,
                              "src": "6411:20:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 21057,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6410:22:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "argumentTypes": null,
                          "id": 21060,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21025,
                          "src": "6465:11:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21061,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "6410:66:62",
                        "trueExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21058,
                            "name": "deposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21012,
                            "src": "6435:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                              "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                            }
                          },
                          "id": 21059,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAmountSignaled",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21152,
                          "src": "6435:27:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21051,
                              "name": "deposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21012,
                              "src": "6377:7:62",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                                "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                              }
                            },
                            "id": 21052,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21148,
                            "src": "6377:14:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 21049,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21032,
                            "src": "6365:7:62",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 21050,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 37536,
                          "src": "6365:11:62",
                          "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": 21053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6365:27:62",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 21054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37553,
                      "src": "6365:31:62",
                      "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": 21062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6365:121:62",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6349:137:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21064,
                    "name": "claim",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21048,
                    "src": "6504:5:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 21010,
                  "id": 21065,
                  "nodeType": "Return",
                  "src": "6497:12:62"
                }
              ]
            },
            "documentation": {
              "id": 21002,
              "nodeType": "StructuredDocumentation",
              "src": "5448:201:62",
              "text": " @notice Calculate claimable amount of a deposit for a given address\n @param payee Address of holder\n @param depositId Id of the deposit\n @return withdrawable amount"
            },
            "functionSelector": "7a22402c",
            "id": 21067,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateClaimOnDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21004,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21067,
                  "src": "5687:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21003,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5687:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21006,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21067,
                  "src": "5702:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21005,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5702:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5686:34:62"
            },
            "returnParameters": {
              "id": 21010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21009,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21067,
                  "src": "5741:7:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21008,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5741:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5740:9:62"
            },
            "scope": 21141,
            "src": "5654:862:62",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21121,
              "nodeType": "Block",
              "src": "7038:323:62",
              "statements": [
                {
                  "assignments": [
                    21086
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21086,
                      "mutability": "mutable",
                      "name": "deposit",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21121,
                      "src": "7048:23:62",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                        "typeString": "struct DepositAllocaterStorage.Deposit"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 21085,
                        "name": "Deposit",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 21165,
                        "src": "7048:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21090,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 21087,
                      "name": "deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21169,
                      "src": "7074:8:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                        "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                      }
                    },
                    "id": 21089,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21088,
                      "name": "depositId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21070,
                      "src": "7083:9:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7074:19:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                      "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7048:45:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21091,
                      "name": "scheduledFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21073,
                      "src": "7104:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21092,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7119:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21093,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "scheduledFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21146,
                      "src": "7119:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7104:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21095,
                  "nodeType": "ExpressionStatement",
                  "src": "7104:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21096,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21075,
                      "src": "7149:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21097,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7158:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21098,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21148,
                      "src": "7158:14:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7149:23:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21100,
                  "nodeType": "ExpressionStatement",
                  "src": "7149:23:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21101,
                      "name": "claimedAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21077,
                      "src": "7182:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21102,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7198:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21103,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21150,
                      "src": "7198:21:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7182:37:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21105,
                  "nodeType": "ExpressionStatement",
                  "src": "7182:37:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21106,
                      "name": "totalAmountSignaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21079,
                      "src": "7229:19:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21107,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7251:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21108,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalAmountSignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21152,
                      "src": "7251:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7229:49:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21110,
                  "nodeType": "ExpressionStatement",
                  "src": "7229:49:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21111,
                      "name": "onlySignaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21081,
                      "src": "7288:12:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21112,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7303:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21113,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "onlySignaled",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21156,
                      "src": "7303:20:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7288:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21115,
                  "nodeType": "ExpressionStatement",
                  "src": "7288:35:62"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21116,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21083,
                      "src": "7333:5:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21117,
                        "name": "deposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21086,
                        "src": "7341:7:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage_ptr",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage pointer"
                        }
                      },
                      "id": 21118,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21154,
                      "src": "7341:13:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7333:21:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21120,
                  "nodeType": "ExpressionStatement",
                  "src": "7333:21:62"
                }
              ]
            },
            "documentation": {
              "id": 21068,
              "nodeType": "StructuredDocumentation",
              "src": "6522:217:62",
              "text": " @notice Returns params of a deposit\n @return scheduledFor\n @return amount\n @return claimedAmount\n @return totalAmountSignaled\n @return onlySignaled\n @return token"
            },
            "functionSelector": "7a86983f",
            "id": 21122,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21070,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6764:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21069,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6764:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6763:19:62"
            },
            "returnParameters": {
              "id": 21084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21073,
                  "mutability": "mutable",
                  "name": "scheduledFor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6841:20:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21072,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6841:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21075,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6875:14:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6875:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21077,
                  "mutability": "mutable",
                  "name": "claimedAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6903:21:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6903:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21079,
                  "mutability": "mutable",
                  "name": "totalAmountSignaled",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6938:27:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6938:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21081,
                  "mutability": "mutable",
                  "name": "onlySignaled",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "6979:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21080,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6979:4:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21083,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21122,
                  "src": "7010:13:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21082,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7010:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6827:206:62"
            },
            "scope": 21141,
            "src": "6744:617:62",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21139,
              "nodeType": "Block",
              "src": "7643:59:62",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21132,
                          "name": "deposits",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21169,
                          "src": "7660:8:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Deposit_$21165_storage_$",
                            "typeString": "mapping(bytes32 => struct DepositAllocaterStorage.Deposit storage ref)"
                          }
                        },
                        "id": 21134,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21133,
                          "name": "depositId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21127,
                          "src": "7669:9:62",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7660:19:62",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$21165_storage",
                          "typeString": "struct DepositAllocaterStorage.Deposit storage ref"
                        }
                      },
                      "id": 21135,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21160,
                      "src": "7660:27:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 21137,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 21136,
                      "name": "holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21125,
                      "src": "7688:6:62",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7660:35:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 21131,
                  "id": 21138,
                  "nodeType": "Return",
                  "src": "7653:42:62"
                }
              ]
            },
            "documentation": {
              "id": 21123,
              "nodeType": "StructuredDocumentation",
              "src": "7367:180:62",
              "text": " @notice Checks whether an address has withdrawn funds for a deposit\n @param depositId Id of the deposit\n @return bool whether the address has claimed"
            },
            "functionSelector": "76fa0e46",
            "id": 21140,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasClaimedDeposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21125,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21140,
                  "src": "7579:14:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21124,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7579:7:62",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21127,
                  "mutability": "mutable",
                  "name": "depositId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21140,
                  "src": "7595:17:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21126,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7595:7:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7578:35:62"
            },
            "returnParameters": {
              "id": 21131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21130,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21140,
                  "src": "7637:4:62",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21129,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7637:4:62",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7636:6:62"
            },
            "scope": 21141,
            "src": "7552:150:62",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 21142,
        "src": "544:7160:62"
      }
    ],
    "src": "41:7664:62"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.203Z",
  "devdoc": {
    "details": "abstract contract",
    "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}."
      },
      "balanceOfAt(address,uint256)": {
        "params": {
          "holder": "Holder to query balance for",
          "timestamp": "Timestamp of the balance checkpoint"
        }
      },
      "calculateClaimOnDeposit(address,bytes32)": {
        "params": {
          "depositId": "Id of the deposit",
          "payee": "Address of holder"
        },
        "returns": {
          "_0": "withdrawable amount"
        }
      },
      "claimDeposit(bytes32)": {
        "params": {
          "depositId": "Id of the deposit"
        }
      },
      "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`."
      },
      "getDeposit(bytes32)": {
        "returns": {
          "amount": "amount",
          "claimedAmount": "claimedAmount",
          "onlySignaled": "onlySignaled",
          "scheduledFor": "scheduledFor",
          "token": "token",
          "totalAmountSignaled": "totalAmountSignaled"
        }
      },
      "getHoldersAt(uint256)": {
        "params": {
          "checkpointId": "Checkpoint id at which holder list is to be populated"
        },
        "returns": {
          "_0": "list of holders"
        }
      },
      "hasClaimedDeposit(address,bytes32)": {
        "params": {
          "depositId": "Id of the deposit"
        },
        "returns": {
          "_0": "bool whether the address has claimed"
        }
      },
      "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."
      },
      "initialize(string,string)": {
        "details": "\"constructor\" to be called on deployment"
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "pushFundsToAddresses(bytes32,address[])": {
        "params": {
          "depositId": "Id of the deposit",
          "payees": "Addresses to which to push the funds"
        }
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "totalSupplyAt(uint256)": {
        "params": {
          "timestamp": "Timestamp of the totalSupply checkpoint"
        },
        "returns": {
          "_0": "uint256"
        }
      },
      "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`."
      }
    },
    "title": "Logic for distributing funds based on checkpointing",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "balanceOfAt(address,uint256)": {
        "notice": "Queries the balances of a holder at a specific timestamp"
      },
      "calculateClaimOnDeposit(address,bytes32)": {
        "notice": "Calculate claimable amount of a deposit for a given address"
      },
      "claimDeposit(bytes32)": {
        "notice": "Withdraws the holders share of funds of the deposit"
      },
      "getDeposit(bytes32)": {
        "notice": "Returns params of a deposit"
      },
      "getHoldersAt(uint256)": {
        "notice": "returns an array of holders with non zero balance at a given checkpoint"
      },
      "hasClaimedDeposit(address,bytes32)": {
        "notice": "Checks whether an address has withdrawn funds for a deposit"
      },
      "initialize(string,string)": {
        "notice": "Initialize a new instance storage"
      },
      "pushFundsToAddresses(bytes32,address[])": {
        "notice": "Issuer can push funds to provided addresses"
      },
      "totalSupplyAt(uint256)": {
        "notice": "Queries totalSupply at a specific timestamp"
      }
    },
    "version": 1
  }
}